diff --git a/.gitignore b/.gitignore index 0669f6d1a..5210f0c87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ vendor -.DS_Store \ No newline at end of file +.DS_Store +composer.lock \ No newline at end of file diff --git a/composer.json b/composer.json index 239dfac8b..9d3fd4980 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "version": "2.0.0-rc.8", + "version": "2.0.0-rc.9", "name": "badaso/core", "description": "The First Open-Source Laravel Vue headless CMS (PWA dashboard + CRUD + API generator & more) for more productivity !", "keywords": [ diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 07343f6e4..000000000 --- a/composer.lock +++ /dev/null @@ -1,7196 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "3e94c16c452b266da3d40de05428f62b", - "packages": [ - { - "name": "anahkiasen/underscore-php", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/Anahkiasen/underscore-php.git", - "reference": "48f97b295c82d99c1fe10d8b0684c43f051b5580" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Anahkiasen/underscore-php/zipball/48f97b295c82d99c1fe10d8b0684c43f051b5580", - "reference": "48f97b295c82d99c1fe10d8b0684c43f051b5580", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.0", - "patchwork/utf8": "^1.2", - "php": ">=5.4.0" - }, - "require-dev": { - "fabpot/php-cs-fixer": "2.0.*@dev", - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Underscore\\": [ - "src", - "tests" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maxime Fabre", - "email": "ehtnam6@gmail.com" - } - ], - "description": "A redacted port of Underscore.js for PHP", - "keywords": [ - "internals", - "laravel", - "toolkit" - ], - "support": { - "issues": "https://github.com/Anahkiasen/underscore-php/issues", - "source": "https://github.com/Anahkiasen/underscore-php/tree/develop" - }, - "abandoned": true, - "time": "2015-05-16T19:24:58+00:00" - }, - { - "name": "arcanedev/log-viewer", - "version": "4.7.3", - "source": { - "type": "git", - "url": "https://github.com/ARCANEDEV/LogViewer.git", - "reference": "bb7bbce12d6220edff8bb4a2e45d1210cb4e08b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ARCANEDEV/LogViewer/zipball/bb7bbce12d6220edff8bb4a2e45d1210cb4e08b6", - "reference": "bb7bbce12d6220edff8bb4a2e45d1210cb4e08b6", - "shasum": "" - }, - "require": { - "arcanedev/support": "~4.5.0", - "ext-json": "*", - "php": ">=7.1.3", - "psr/log": "~1.0" - }, - "require-dev": { - "mockery/mockery": "~1.0", - "orchestra/testbench": "~3.8.0", - "phpunit/phpcov": "~5.0|~6.0", - "phpunit/phpunit": "~7.0|~8.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Arcanedev\\LogViewer\\LogViewerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Arcanedev\\LogViewer\\": "src/" - }, - "files": [ - "constants.php", - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "ARCANEDEV", - "email": "arcanedev.maroc@gmail.com", - "homepage": "https://github.com/arcanedev-maroc", - "role": "Developer" - } - ], - "description": "Provides a Log Viewer for Laravel 5", - "homepage": "https://github.com/ARCANEDEV/LogViewer", - "keywords": [ - "arcanedev", - "arcanesoft", - "laravel", - "log", - "log viewer", - "log-viewer", - "logviewer" - ], - "support": { - "issues": "https://github.com/ARCANEDEV/LogViewer/issues", - "source": "https://github.com/ARCANEDEV/LogViewer/tree/v4.7" - }, - "time": "2019-09-12T19:13:38+00:00" - }, - { - "name": "arcanedev/support", - "version": "4.5.0", - "source": { - "type": "git", - "url": "https://github.com/ARCANEDEV/Support.git", - "reference": "2bb6e901404a12caa440520676b6507569d20715" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ARCANEDEV/Support/zipball/2bb6e901404a12caa440520676b6507569d20715", - "reference": "2bb6e901404a12caa440520676b6507569d20715", - "shasum": "" - }, - "require": { - "illuminate/filesystem": "~5.8.0", - "illuminate/support": "~5.8.0", - "php": ">=7.1.3" - }, - "require-dev": { - "orchestra/testbench": "~3.8.0", - "phpunit/phpcov": "~5.0|~6.0", - "phpunit/phpunit": "~7.0|~8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Arcanedev\\Support\\": "src/" - }, - "files": [ - "constants.php", - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "ARCANEDEV", - "email": "arcanedev.maroc@gmail.com", - "homepage": "https://github.com/arcanedev-maroc" - } - ], - "description": "ARCANEDEV Support Helpers", - "homepage": "https://github.com/ARCANEDEV/Support", - "keywords": [ - "arcanedev", - "arcanesoft", - "laravel", - "support" - ], - "support": { - "issues": "https://github.com/ARCANEDEV/Support/issues", - "source": "https://github.com/ARCANEDEV/Support/tree/master" - }, - "time": "2019-02-27T18:33:30+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.184.7", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "d5d5fe5fdfca6c7a56f2f8364d09c3100d5c2149" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d5d5fe5fdfca6c7a56f2f8364d09c3100d5c2149", - "reference": "d5d5fe5fdfca6c7a56f2f8364d09c3100d5c2149", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.7.0", - "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35|^5.4.3", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Aws\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.184.7" - }, - "time": "2021-06-21T18:37:16+00:00" - }, - { - "name": "darkaonline/l5-swagger", - "version": "5.8.5", - "source": { - "type": "git", - "url": "https://github.com/DarkaOnLine/L5-Swagger.git", - "reference": "fddbeed402553c7548e3389d2c501c4fdad57dbe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DarkaOnLine/L5-Swagger/zipball/fddbeed402553c7548e3389d2c501c4fdad57dbe", - "reference": "fddbeed402553c7548e3389d2c501c4fdad57dbe", - "shasum": "" - }, - "require": { - "laravel/framework": "5.6.*|5.7.*|5.8.*", - "php": ">=7.1.3", - "swagger-api/swagger-ui": "^3.0", - "symfony/yaml": "^4.1", - "zircote/swagger-php": "~2.0|3.*" - }, - "require-dev": { - "mockery/mockery": "1.*", - "orchestra/testbench": "3.6.*|3.8.*", - "php-coveralls/php-coveralls": "^2.0", - "phpunit/phpunit": "7.*" - }, - "suggest": { - "zircote/swagger-php:~2.0": "!!! Require Swagger-PHP ~2.0 for @SWG annotations support !!!" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "L5Swagger\\L5SwaggerServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "L5Swagger\\": "src" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Darius Matulionis", - "email": "darius@matulionis.lt" - } - ], - "description": "Swagger integration to Laravel 5", - "keywords": [ - "api", - "laravel", - "swagger" - ], - "support": { - "issues": "https://github.com/DarkaOnLine/L5-Swagger/issues", - "source": "https://github.com/DarkaOnLine/L5-Swagger/tree/5.8.x" - }, - "funding": [ - { - "url": "https://github.com/DarkaOnLine", - "type": "github" - } - ], - "time": "2020-08-21T05:39:35+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.13.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.13.1" - }, - "time": "2021-05-16T18:07:53+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/c9622c6820d3ede1e2315a6a377ea1076e421d88", - "reference": "c9622c6820d3ede1e2315a6a377ea1076e421d88", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4", - "psr/cache": ">=3" - }, - "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", - "psr/cache": "^1.0 || ^2.0", - "symfony/cache": "^4.4 || ^5.2" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.0.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2021-05-25T09:43:04+00:00" - }, - { - "name": "doctrine/dbal", - "version": "2.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "reference": "8dd39d2ead4409ce652fd4f02621060f009ea5e4", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.0|^2.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "ext-pdo": "*", - "php": "^7.1 || ^8" - }, - "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2020.2", - "phpstan/phpstan": "0.12.81", - "phpunit/phpunit": "^7.5.20|^8.5|9.5.5", - "squizlabs/php_codesniffer": "3.6.0", - "symfony/cache": "^4.4", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "4.6.4" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlanywhere", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.13.2" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2021-06-18T21:48:39+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v0.5.3", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", - "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" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" - }, - "time": "2021-03-21T12:59:47+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": "<2.9@dev" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2020-05-29T18:28:51+00:00" - }, - { - "name": "doctrine/inflector", - "version": "1.4.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", - "reference": "4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/1.4.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2021-04-16T17:34:40+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2020-05-25T17:44:05+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v2.3.1", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2020-10-13T00:52:37+00:00" - }, - { - "name": "egulias/email-validator", - "version": "2.1.25", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2020-12-29T14:50:06+00:00" - }, - { - "name": "erusev/parsedown", - "version": "1.8.0-beta-7", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955", - "reference": "fe7a50eceb4a3c867cc9fa9c0aa906b1067d1955", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "support": { - "issues": "https://github.com/erusev/parsedown/issues", - "source": "https://github.com/erusev/parsedown/tree/1.8.0-beta-7" - }, - "time": "2019-03-17T18:47:21+00:00" - }, - { - "name": "firebase/php-jwt", - "version": "v5.3.0", - "source": { - "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "3c2d70f2e64e2922345e89f2ceae47d2463faae1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/3c2d70f2e64e2922345e89f2ceae47d2463faae1", - "reference": "3c2d70f2e64e2922345e89f2ceae47d2463faae1", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": ">=4.8 <=9" - }, - "type": "library", - "autoload": { - "psr-4": { - "Firebase\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Neuman Vong", - "email": "neuman+pear@twilio.com", - "role": "Developer" - }, - { - "name": "Anant Narayanan", - "email": "anant@php.net", - "role": "Developer" - } - ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "keywords": [ - "jwt", - "php" - ], - "support": { - "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v5.3.0" - }, - "time": "2021-05-20T17:37:02+00:00" - }, - { - "name": "google/apiclient", - "version": "v2.9.2", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "e9ef4c26a044b8d39a46bcf296be795fe24a1849" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/e9ef4c26a044b8d39a46bcf296be795fe24a1849", - "reference": "e9ef4c26a044b8d39a46bcf296be795fe24a1849", - "shasum": "" - }, - "require": { - "firebase/php-jwt": "~2.0||~3.0||~4.0||~5.0", - "google/apiclient-services": "~0.13", - "google/auth": "^1.10", - "guzzlehttp/guzzle": "~5.3.3||~6.0||~7.0", - "guzzlehttp/psr7": "^1.2", - "monolog/monolog": "^1.17|^2.0", - "php": "^5.6|^7.0|^8.0", - "phpseclib/phpseclib": "~2.0||^3.0.2" - }, - "require-dev": { - "cache/filesystem-adapter": "^0.3.2|^1.1", - "composer/composer": "^1.10.22", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "phpcompatibility/php-compatibility": "^9.2", - "phpunit/phpunit": "^5.7||^8.5.13", - "squizlabs/php_codesniffer": "~2.3", - "symfony/css-selector": "~2.1", - "symfony/dom-crawler": "~2.1" - }, - "suggest": { - "cache/filesystem-adapter": "For caching certs and tokens (using Google\\Client::setCache)" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Google\\": "src/" - }, - "files": [ - "src/aliases.php" - ], - "classmap": [ - "src/aliases.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Client library for Google APIs", - "homepage": "http://developers.google.com/api-client-library/php", - "keywords": [ - "google" - ], - "support": { - "issues": "https://github.com/googleapis/google-api-php-client/issues", - "source": "https://github.com/googleapis/google-api-php-client/tree/v2.9.2" - }, - "time": "2021-06-09T22:15:08+00:00" - }, - { - "name": "google/apiclient-services", - "version": "v0.201.0", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "0375af405757b36f3bcc82e19d7daf61e0b4cfd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/0375af405757b36f3bcc82e19d7daf61e0b4cfd8", - "reference": "0375af405757b36f3bcc82e19d7daf61e0b4cfd8", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "^5.7||^8.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Google\\Service\\": "src" - }, - "files": [ - "autoload.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Client library for Google APIs", - "homepage": "http://developers.google.com/api-client-library/php", - "keywords": [ - "google" - ], - "support": { - "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.201.0" - }, - "time": "2021-06-18T15:00:35+00:00" - }, - { - "name": "google/auth", - "version": "v1.16.0", - "source": { - "type": "git", - "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "c747738d2dd450f541f09f26510198fbedd1c8a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/c747738d2dd450f541f09f26510198fbedd1c8a0", - "reference": "c747738d2dd450f541f09f26510198fbedd1c8a0", - "shasum": "" - }, - "require": { - "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", - "guzzlehttp/guzzle": "^5.3.1|^6.2.1|^7.0", - "guzzlehttp/psr7": "^1.2", - "php": ">=5.4", - "psr/cache": "^1.0|^2.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "guzzlehttp/promises": "0.1.1|^1.3", - "kelvinmo/simplejwt": "^0.2.5|^0.5.1", - "phpseclib/phpseclib": "^2.0.31", - "phpunit/phpunit": "^4.8.36|^5.7", - "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "phpseclib/phpseclib": "May be used in place of OpenSSL for signing strings or for token management. Please require version ^2." - }, - "type": "library", - "autoload": { - "psr-4": { - "Google\\Auth\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "Google Auth Library for PHP", - "homepage": "http://github.com/google/google-auth-library-php", - "keywords": [ - "Authentication", - "google", - "oauth2" - ], - "support": { - "docs": "https://googleapis.github.io/google-auth-library-php/master/", - "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.16.0" - }, - "time": "2021-06-22T18:06:03+00:00" - }, - { - "name": "graham-campbell/guzzle-factory", - "version": "v3.0.4", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Guzzle-Factory.git", - "reference": "618cf7220b177c6d9939a36331df937739ffc596" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Guzzle-Factory/zipball/618cf7220b177c6d9939a36331df937739ffc596", - "reference": "618cf7220b177c6d9939a36331df937739ffc596", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.2", - "php": "^7.0|^8.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^2.4", - "phpunit/phpunit": "^6.5|^7.0|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\GuzzleFactory\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Provides A Simple Guzzle Factory With Good Defaults", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Guzzle", - "Guzzle Factory", - "Guzzle-Factory", - "http" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Guzzle-Factory/issues", - "source": "https://github.com/GrahamCampbell/Guzzle-Factory/tree/3.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/guzzle-factory", - "type": "tidelift" - } - ], - "time": "2020-05-02T14:45:48+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" - }, - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.1" - }, - "time": "2021-03-07T09:25:29+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" - }, - "time": "2021-04-26T09:17:50+00:00" - }, - { - "name": "haydenpierce/class-finder", - "version": "0.4.3", - "source": { - "type": "git", - "url": "https://gitlab.com/hpierce1102/ClassFinder.git", - "reference": "d6c68f386c764674c59ee336d1dfca35aada5f90" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/hpierce1102%2FClassFinder/repository/archive.zip?sha=d6c68f386c764674c59ee336d1dfca35aada5f90", - "reference": "d6c68f386c764674c59ee336d1dfca35aada5f90", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.3" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "~9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "HaydenPierce\\ClassFinder\\": "src/", - "HaydenPierce\\ClassFinder\\UnitTest\\": "test/unit" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Hayden Pierce", - "email": "hayden@haydenpierce.com" - } - ], - "description": "A library that can provide of a list of classes in a given namespace", - "support": { - "issues": "https://gitlab.com/api/v4/projects/7670051/issues" - }, - "time": "2021-01-05T20:50:49+00:00" - }, - { - "name": "intervention/image", - "version": "2.5.1", - "source": { - "type": "git", - "url": "https://github.com/Intervention/image.git", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1", - "php": ">=5.4.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7" - }, - "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing.", - "intervention/imagecache": "Caching extension for the Intervention Image library" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, - "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], - "aliases": { - "Image": "Intervention\\Image\\Facades\\Image" - } - } - }, - "autoload": { - "psr-4": { - "Intervention\\Image\\": "src/Intervention/Image" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oliver Vogel", - "email": "oliver@olivervogel.com", - "homepage": "http://olivervogel.com/" - } - ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", - "keywords": [ - "gd", - "image", - "imagick", - "laravel", - "thumbnail", - "watermark" - ], - "support": { - "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/master" - }, - "time": "2019-11-02T09:15:47+00:00" - }, - { - "name": "laragraph/utils", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/laragraph/utils.git", - "reference": "36b489f37b0688a0c806c839dd0e27cbb0cb4dca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laragraph/utils/zipball/36b489f37b0688a0c806c839dd0e27cbb0cb4dca", - "reference": "36b489f37b0688a0c806c839dd0e27cbb0cb4dca", - "shasum": "" - }, - "require": { - "illuminate/contracts": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/http": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "php": "^7.2 || ^8.0", - "thecodingmachine/safe": "^1.1", - "webonyx/graphql-php": "^0.13.2 || ^14" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.11", - "infection/infection": "~0.20", - "jangregor/phpstan-prophecy": "^0.8.1", - "orchestra/testbench": "3.6.* || 3.7.* || 3.8.* || 3.9.* || ^4 || ^5 || ^6", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.57", - "phpstan/phpstan-deprecation-rules": "^0.12.5", - "phpstan/phpstan-strict-rules": "^0.12.5", - "phpunit/phpunit": "^7.5 || ^8.5", - "thecodingmachine/phpstan-safe-rule": "^1.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laragraph\\Utils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benedikt Franke", - "email": "benedikt@franke.tech" - } - ], - "description": "Utilities for using GraphQL with Laravel", - "homepage": "https://github.com/laragraph/utils", - "support": { - "issues": "https://github.com/laragraph/utils/issues", - "source": "https://github.com/laragraph/utils" - }, - "time": "2020-12-30T13:17:17+00:00" - }, - { - "name": "larapack/doctrine-support", - "version": "v0.1.9", - "source": { - "type": "git", - "url": "https://github.com/larapack/doctrine-support.git", - "reference": "ab6e821c467704ae91a9a944e6ebdaad6a99a294" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/larapack/doctrine-support/zipball/ab6e821c467704ae91a9a944e6ebdaad6a99a294", - "reference": "ab6e821c467704ae91a9a944e6ebdaad6a99a294", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.5", - "illuminate/support": ">=5.3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Larapack\\DoctrineSupport\\DoctrineSupportServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Larapack\\DoctrineSupport\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Topper", - "email": "mark@ulties.com" - } - ], - "description": "Better Doctrine Support with Laravel (Support for `enum`)", - "homepage": "https://github.com/larapack/doctrine-support", - "keywords": [ - "dbal", - "doctrine", - "enum", - "laravel", - "support" - ], - "support": { - "issues": "https://github.com/larapack/doctrine-support/issues", - "source": "https://github.com/larapack/doctrine-support" - }, - "time": "2019-09-05T13:15:40+00:00" - }, - { - "name": "laravel/framework", - "version": "v5.8.38", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/78eb4dabcc03e189620c16f436358d41d31ae11f", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", - "opis/closure": "^3.1", - "php": "^7.1.3", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.8.*", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" - }, - "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.8-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2020-04-14T14:14:36+00:00" - }, - { - "name": "lcobucci/jwt", - "version": "3.3.3", - "source": { - "type": "git", - "url": "https://github.com/lcobucci/jwt.git", - "reference": "c1123697f6a2ec29162b82f170dd4a491f524773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/c1123697f6a2ec29162b82f170dd4a491f524773", - "reference": "c1123697f6a2ec29162b82f170dd4a491f524773", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "ext-openssl": "*", - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "mikey179/vfsstream": "~1.5", - "phpmd/phpmd": "~2.2", - "phpunit/php-invoker": "~1.1", - "phpunit/phpunit": "^5.7 || ^7.3", - "squizlabs/php_codesniffer": "~2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "Lcobucci\\JWT\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Luís Otávio Cobucci Oblonczyk", - "email": "lcobucci@gmail.com", - "role": "Developer" - } - ], - "description": "A simple library to work with JSON Web Token and JSON Web Signature", - "keywords": [ - "JWS", - "jwt" - ], - "support": { - "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/3.3.3" - }, - "funding": [ - { - "url": "https://github.com/lcobucci", - "type": "github" - }, - { - "url": "https://www.patreon.com/lcobucci", - "type": "patreon" - } - ], - "time": "2020-08-20T13:22:28+00:00" - }, - { - "name": "league/flysystem", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-fileinfo": "Required for MimeType", - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.x" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2020-08-23T07:39:11+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "1.0.29", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "4e25cc0582a36a786c31115e419c6e40498f6972" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4e25cc0582a36a786c31115e419c6e40498f6972", - "reference": "4e25cc0582a36a786c31115e419c6e40498f6972", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.20.0", - "league/flysystem": "^1.0.40", - "php": ">=5.5.0" - }, - "require-dev": { - "henrikbjorn/phpspec-code-coverage": "~1.0.1", - "phpspec/phpspec": "^2.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3v3\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "support": { - "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/1.0.29" - }, - "time": "2020-10-08T18:58:37+00:00" - }, - { - "name": "league/flysystem-cached-adapter", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-cached-adapter.git", - "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-cached-adapter/zipball/d1925efb2207ac4be3ad0c40b8277175f99ffaff", - "reference": "d1925efb2207ac4be3ad0c40b8277175f99ffaff", - "shasum": "" - }, - "require": { - "league/flysystem": "~1.0", - "psr/cache": "^1.0.0" - }, - "require-dev": { - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7", - "predis/predis": "~1.0", - "tedivm/stash": "~0.12" - }, - "suggest": { - "ext-phpredis": "Pure C implemented extension for PHP" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\Cached\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "frankdejonge", - "email": "info@frenky.net" - } - ], - "description": "An adapter decorator to enable meta-data caching.", - "support": { - "issues": "https://github.com/thephpleague/flysystem-cached-adapter/issues", - "source": "https://github.com/thephpleague/flysystem-cached-adapter/tree/master" - }, - "time": "2020-07-25T15:56:04+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "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.7.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2021-01-18T20:58:21+00:00" - }, - { - "name": "monolog/monolog", - "version": "1.26.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c6b00f05152ae2c9b04a448f99c7590beb6042f5", - "reference": "c6b00f05152ae2c9b04a448f99c7590beb6042f5", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpstan/phpstan": "^0.12.59", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.26.1" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2021-05-28T08:32:12+00:00" - }, - { - "name": "mtdowling/jmespath.php", - "version": "2.6.1", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "JmesPath\\": "src/" - }, - "files": [ - "src/JmesPath.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" - }, - "time": "2021-06-14T00:11:39+00:00" - }, - { - "name": "namshi/jose", - "version": "7.2.3", - "source": { - "type": "git", - "url": "https://github.com/namshi/jose.git", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": ">=5.5", - "symfony/polyfill-php56": "^1.0" - }, - "require-dev": { - "phpseclib/phpseclib": "^2.0", - "phpunit/phpunit": "^4.5|^5.0", - "satooshi/php-coveralls": "^1.0" - }, - "suggest": { - "ext-openssl": "Allows to use OpenSSL as crypto engine.", - "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." - }, - "type": "library", - "autoload": { - "psr-4": { - "Namshi\\JOSE\\": "src/Namshi/JOSE/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Nadalin", - "email": "alessandro.nadalin@gmail.com" - }, - { - "name": "Alessandro Cinelli (cirpo)", - "email": "alessandro.cinelli@gmail.com" - } - ], - "description": "JSON Object Signing and Encryption library for PHP.", - "keywords": [ - "JSON Web Signature", - "JSON Web Token", - "JWS", - "json", - "jwt", - "token" - ], - "support": { - "issues": "https://github.com/namshi/jose/issues", - "source": "https://github.com/namshi/jose/tree/master" - }, - "time": "2016-12-05T07:27:31+00:00" - }, - { - "name": "nao-pon/flysystem-cached-extra", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/nao-pon/flysystem-cached-extra.git", - "reference": "189abdafa0a86d92781e148ee8740ef80f4c5859" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nao-pon/flysystem-cached-extra/zipball/189abdafa0a86d92781e148ee8740ef80f4c5859", - "reference": "189abdafa0a86d92781e148ee8740ef80f4c5859", - "shasum": "" - }, - "require": { - "league/flysystem-cached-adapter": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Hypweb\\Flysystem\\Cached\\Extra\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Naoki Sawada", - "email": "hypweb@gmail.com" - } - ], - "description": "Extra traits for Flysystem cached adapter", - "support": { - "issues": "https://github.com/nao-pon/flysystem-cached-extra/issues", - "source": "https://github.com/nao-pon/flysystem-cached-extra/tree/master" - }, - "time": "2018-02-16T01:44:38+00:00" - }, - { - "name": "nao-pon/flysystem-google-drive", - "version": "1.1.13", - "source": { - "type": "git", - "url": "https://github.com/nao-pon/flysystem-google-drive.git", - "reference": "bb812339ecf06540ed096f71403f10fcbcc590f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nao-pon/flysystem-google-drive/zipball/bb812339ecf06540ed096f71403f10fcbcc590f3", - "reference": "bb812339ecf06540ed096f71403f10fcbcc590f3", - "shasum": "" - }, - "require": { - "google/apiclient": "^2.0", - "league/flysystem": "~1.0", - "nao-pon/flysystem-cached-extra": "~1.0", - "php": ">=5.4.0" - }, - "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-api_v2": "1.0.x-dev", - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Hypweb\\Flysystem\\GoogleDrive\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Naoki Sawada", - "email": "hypweb@gmail.com" - } - ], - "description": "Flysystem adapter for Google Drive", - "support": { - "issues": "https://github.com/nao-pon/flysystem-google-drive/issues", - "source": "https://github.com/nao-pon/flysystem-google-drive/tree/1.1.13" - }, - "time": "2020-07-30T01:26:26+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.49.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/93d9db91c0235c486875d22f1e08b50bdf3e6eee", - "reference": "93d9db91c0235c486875d22f1e08b50bdf3e6eee", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" - }, - "require-dev": { - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2021-06-02T07:31:40+00:00" - }, - { - "name": "nuwave/lighthouse", - "version": "v5.13.0", - "source": { - "type": "git", - "url": "https://github.com/nuwave/lighthouse.git", - "reference": "0d8f0fb8a3dd2791dda4c772f3db4b53ee072fb3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nuwave/lighthouse/zipball/0d8f0fb8a3dd2791dda4c772f3db4b53ee072fb3", - "reference": "0d8f0fb8a3dd2791dda4c772f3db4b53ee072fb3", - "shasum": "" - }, - "require": { - "ext-json": "*", - "haydenpierce/class-finder": "^0.4", - "illuminate/auth": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/bus": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/contracts": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/http": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/pagination": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/queue": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/routing": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/support": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "illuminate/validation": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "laragraph/utils": "^1", - "php": ">= 7.2", - "thecodingmachine/safe": "^1", - "webonyx/graphql-php": "^14.7" - }, - "require-dev": { - "bensampo/laravel-enum": "^1.28.3 || ^2 || ^3", - "ergebnis/composer-normalize": "^2.2.2", - "laravel/framework": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "laravel/legacy-factories": "^1", - "laravel/lumen-framework": "5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8", - "laravel/scout": "^7 || ^8", - "mll-lab/graphql-php-scalars": "^4", - "mockery/mockery": "^1", - "nunomaduro/larastan": "^0.6 || ^0.7", - "orchestra/testbench": "3.6.* || 3.7.* || 3.8.* || 3.9.* || ^4 || ^5 || ^6", - "phpbench/phpbench": "1.0.0-alpha4", - "phpstan/phpstan": "0.12.89", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.17", - "phpunit/phpunit": "^7.5 || ^8.4 || ^9", - "predis/predis": "^1.1", - "pusher/pusher-php-server": "^4 || ^5", - "rector/rector": "^0.9", - "thecodingmachine/phpstan-safe-rule": "^1", - "vimeo/psalm": "^4.7" - }, - "suggest": { - "bensampo/laravel-enum": "Convenient enum definitions that can easily be registered in your Schema", - "laravel/scout": "Required for the @search directive", - "mll-lab/graphql-php-scalars": "Useful scalar types, required for @whereConditions", - "mll-lab/laravel-graphql-playground": "GraphQL IDE for better development workflow - integrated with Laravel", - "pusher/pusher-php-server": "Required when using the Pusher Subscriptions driver" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "graphql": "Nuwave\\Lighthouse\\GraphQL" - }, - "providers": [ - "Nuwave\\Lighthouse\\LighthouseServiceProvider", - "Nuwave\\Lighthouse\\GlobalId\\GlobalIdServiceProvider", - "Nuwave\\Lighthouse\\OrderBy\\OrderByServiceProvider", - "Nuwave\\Lighthouse\\Pagination\\PaginationServiceProvider", - "Nuwave\\Lighthouse\\Scout\\ScoutServiceProvider", - "Nuwave\\Lighthouse\\SoftDeletes\\SoftDeletesServiceProvider", - "Nuwave\\Lighthouse\\Validation\\ValidationServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Nuwave\\Lighthouse\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christopher Moore", - "email": "chris@nuwavecommerce.com", - "homepage": "https://www.nuwavecommerce.com" - }, - { - "name": "Benedikt Franke", - "email": "benedikt@franke.tech", - "homepage": "https://franke.tech" - } - ], - "description": "A framework for serving GraphQL from Laravel", - "homepage": "https://lighthouse-php.com", - "keywords": [ - "graphql", - "laravel", - "laravel-graphql" - ], - "support": { - "issues": "https://github.com/nuwave/lighthouse/issues", - "source": "https://github.com/nuwave/lighthouse" - }, - "funding": [ - { - "url": "https://github.com/spawnia", - "type": "github" - }, - { - "url": "https://issuehunt.io/r/nuwave/lighthouse", - "type": "issuehunt" - }, - { - "url": "https://www.patreon.com/lighthouse_php", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nuwave/lighthouse", - "type": "tidelift" - } - ], - "time": "2021-06-17T13:23:22+00:00" - }, - { - "name": "opis/closure", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" - }, - "time": "2021-04-09T13:42:10+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", - "reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c", - "shasum": "" - }, - "require": { - "php": "^7|^8" - }, - "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2020-12-06T15:14:20+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2018-07-02T15:55:56+00:00" - }, - { - "name": "patchwork/utf8", - "version": "v1.3.3", - "source": { - "type": "git", - "url": "https://github.com/tchwork/utf8.git", - "reference": "e1fa4d4a57896d074c9a8d01742b688d5db4e9d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tchwork/utf8/zipball/e1fa4d4a57896d074c9a8d01742b688d5db4e9d5", - "reference": "e1fa4d4a57896d074c9a8d01742b688d5db4e9d5", - "shasum": "" - }, - "require": { - "lib-pcre": ">=7.3", - "php": ">=5.3.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3.4|^4.4" - }, - "suggest": { - "ext-iconv": "Use iconv for best performance", - "ext-intl": "Use Intl for best performance", - "ext-mbstring": "Use Mbstring for best performance", - "ext-wfio": "Use WFIO for UTF-8 filesystem access on Windows" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-4": { - "Patchwork\\": "src/Patchwork/" - }, - "classmap": [ - "src/Normalizer.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "(Apache-2.0 or GPL-2.0)" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP", - "homepage": "https://github.com/tchwork/utf8", - "keywords": [ - "grapheme", - "i18n", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "issues": "https://github.com/tchwork/utf8/issues", - "source": "https://github.com/tchwork/utf8/tree/v1.3.3" - }, - "funding": [ - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/patchwork/utf8", - "type": "tidelift" - } - ], - "abandoned": "symfony/polyfill-mbstring or symfony/string", - "time": "2021-01-07T16:38:58+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.7.5", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2020-07-20T17:29:33+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "3.0.9", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "a127a5133804ff2f47ae629dd529b129da616ad7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/a127a5133804ff2f47ae629dd529b129da616ad7", - "reference": "a127a5133804ff2f47ae629dd529b129da616ad7", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1|^2", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib3\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.9" - }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2021-06-14T06:54:45+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/container", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2017-10-23T01:57:42+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/uuid", - "version": "3.9.3", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", - "shasum": "" - }, - "require": { - "ext-json": "*", - "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7 | ^8", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "codeception/aspect-mock": "^1 | ^2", - "doctrine/annotations": "^1.2", - "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^1", - "mockery/mockery": "^0.9.11 | ^1", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock-phpunit": "^0.3 | ^1.1", - "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid", - "wiki": "https://github.com/ramsey/uuid/wiki" - }, - "time": "2020-02-21T04:36:14+00:00" - }, - { - "name": "spatie/db-dumper", - "version": "2.21.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/db-dumper.git", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/db-dumper/zipball/05e5955fb882008a8947c5a45146d86cfafa10d1", - "reference": "05e5955fb882008a8947c5a45146d86cfafa10d1", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "symfony/process": "^4.2|^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\DbDumper\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Dump databases", - "homepage": "https://github.com/spatie/db-dumper", - "keywords": [ - "database", - "db-dumper", - "dump", - "mysqldump", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/db-dumper/issues", - "source": "https://github.com/spatie/db-dumper/tree/2.21.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-02-24T14:56:42+00:00" - }, - { - "name": "spatie/dropbox-api", - "version": "1.19.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/dropbox-api.git", - "reference": "22ed7792e7ede170520f030e32ff0edde2337842" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/dropbox-api/zipball/22ed7792e7ede170520f030e32ff0edde2337842", - "reference": "22ed7792e7ede170520f030e32ff0edde2337842", - "shasum": "" - }, - "require": { - "graham-campbell/guzzle-factory": "^3.0||^4.0||^5.0", - "guzzlehttp/guzzle": "^6.2||^7.0", - "php": "^7.1||^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.5.15|^8.5|^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Dropbox\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alex Vanderbist", - "email": "alex.vanderbist@gmail.com", - "homepage": "https://spatie.be", - "role": "Developer" - }, - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A minimal implementation of Dropbox API v2", - "homepage": "https://github.com/spatie/dropbox-api", - "keywords": [ - "Dropbox-API", - "api", - "dropbox", - "spatie", - "v2" - ], - "support": { - "issues": "https://github.com/spatie/dropbox-api/issues", - "source": "https://github.com/spatie/dropbox-api/tree/1.19.0" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2021-06-18T06:34:17+00:00" - }, - { - "name": "spatie/flysystem-dropbox", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/flysystem-dropbox.git", - "reference": "8b6b072f217343b875316ca6a4203dd59f04207a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flysystem-dropbox/zipball/8b6b072f217343b875316ca6a4203dd59f04207a", - "reference": "8b6b072f217343b875316ca6a4203dd59f04207a", - "shasum": "" - }, - "require": { - "league/flysystem": "^1.0.20", - "php": "^7.0 || ^8.0", - "spatie/dropbox-api": "^1.1.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.11 || ^9.4.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\FlysystemDropbox\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alex Vanderbist", - "email": "alex.vanderbist@gmail.com", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Flysystem Adapter for the Dropbox v2 API", - "homepage": "https://github.com/spatie/flysystem-dropbox", - "keywords": [ - "Flysystem", - "api", - "dropbox", - "flysystem-dropbox", - "spatie", - "v2" - ], - "support": { - "issues": "https://github.com/spatie/flysystem-dropbox/issues", - "source": "https://github.com/spatie/flysystem-dropbox/tree/1.2.3" - }, - "time": "2020-11-28T22:17:09+00:00" - }, - { - "name": "spatie/laravel-activitylog", - "version": "3.9.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-activitylog.git", - "reference": "659738573f8607191afbd2b794db8669a5b20951" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-activitylog/zipball/659738573f8607191afbd2b794db8669a5b20951", - "reference": "659738573f8607191afbd2b794db8669a5b20951", - "shasum": "" - }, - "require": { - "illuminate/config": "5.8.*|^6.0", - "illuminate/database": "5.8.*|^6.0", - "illuminate/support": "5.8.*|^6.0", - "php": "^7.2", - "spatie/string": "^2.1" - }, - "require-dev": { - "ext-json": "*", - "orchestra/testbench": "3.8.*|^4.0", - "phpunit/phpunit": "^7.5|^8.0", - "scrutinizer/ocular": "^1.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\Activitylog\\ActivitylogServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\Activitylog\\": "src" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - }, - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - }, - { - "name": "Tom Witkowski", - "email": "dev.gummibeer@gmail.com", - "homepage": "https://gummibeer.de", - "role": "Developer" - } - ], - "description": "A very simple activity logger to monitor the users of your website or application", - "homepage": "https://github.com/spatie/activitylog", - "keywords": [ - "activity", - "laravel", - "log", - "spatie", - "user" - ], - "support": { - "issues": "https://github.com/spatie/laravel-activitylog/issues", - "source": "https://github.com/spatie/laravel-activitylog/tree/master" - }, - "time": "2019-10-15T07:39:07+00:00" - }, - { - "name": "spatie/laravel-backup", - "version": "6.12.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-backup.git", - "reference": "0690862ae2c64e1a2f03fa9990925313696db71d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-backup/zipball/0690862ae2c64e1a2f03fa9990925313696db71d", - "reference": "0690862ae2c64e1a2f03fa9990925313696db71d", - "shasum": "" - }, - "require": { - "illuminate/console": "^5.8.15|^6.0|^7.0|^8.0", - "illuminate/contracts": "^5.8.15|^6.0|^7.0|^8.0", - "illuminate/events": "^5.8.15|^6.0|^7.0|^8.0", - "illuminate/filesystem": "^5.8.15|^6.0|^7.0|^8.0", - "illuminate/notifications": "^5.8.15|^6.0|^7.0|^8.0", - "illuminate/support": "^5.8.15|^6.0|^7.0|^8.0", - "league/flysystem": "^1.0.49", - "php": "^7.3", - "spatie/db-dumper": "^2.12", - "spatie/temporary-directory": "^1.1", - "symfony/finder": "^4.2|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "laravel/slack-notification-channel": "^1.0", - "league/flysystem-aws-s3-v3": "^1.0", - "mockery/mockery": "^1.3", - "orchestra/testbench": "3.8.*|4.*|5.*|6.*", - "phpunit/phpunit": "^8.4|^9.0" - }, - "suggest": { - "laravel/slack-notification-channel": "Required for sending notifications via Slack" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\Backup\\BackupServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\Backup\\": "src" - }, - "files": [ - "src/Helpers/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A Laravel package to backup your application", - "homepage": "https://github.com/spatie/laravel-backup", - "keywords": [ - "backup", - "database", - "laravel-backup", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-backup/issues", - "source": "https://github.com/spatie/laravel-backup/tree/6.12.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2020-11-19T14:35:13+00:00" - }, - { - "name": "spatie/string", - "version": "2.2.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/string.git", - "reference": "79ed501c8d624fb85bf71da4254e1878fb616c51" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/string/zipball/79ed501c8d624fb85bf71da4254e1878fb616c51", - "reference": "79ed501c8d624fb85bf71da4254e1878fb616c51", - "shasum": "" - }, - "require": { - "anahkiasen/underscore-php": "^2.0", - "php": "^7.0|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "autoload": { - "files": [ - "src/string_functions.php" - ], - "psr-4": { - "Spatie\\String\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "String handling evolved", - "homepage": "https://github.com/spatie/string", - "keywords": [ - "handling", - "handy", - "spatie", - "string" - ], - "support": { - "issues": "https://github.com/spatie/string/issues", - "source": "https://github.com/spatie/string/tree/2.2.3" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - } - ], - "time": "2020-11-28T22:24:20+00:00" - }, - { - "name": "spatie/temporary-directory", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/temporary-directory.git", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/f517729b3793bca58f847c5fd383ec16f03ffec6", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\TemporaryDirectory\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alex Vanderbist", - "email": "alex@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Easily create, use and destroy temporary directories", - "homepage": "https://github.com/spatie/temporary-directory", - "keywords": [ - "php", - "spatie", - "temporary-directory" - ], - "support": { - "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/1.3.0" - }, - "time": "2020-11-09T15:54:21+00:00" - }, - { - "name": "swagger-api/swagger-ui", - "version": "v3.50.0", - "source": { - "type": "git", - "url": "https://github.com/swagger-api/swagger-ui.git", - "reference": "91858cc811d3cddb45ef604365e2c88cd96e4ca0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/91858cc811d3cddb45ef604365e2c88cd96e4ca0", - "reference": "91858cc811d3cddb45ef604365e2c88cd96e4ca0", - "shasum": "" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Anna Bodnia", - "email": "anna.bodnia@gmail.com" - }, - { - "name": "Buu Nguyen", - "email": "buunguyen@gmail.com" - }, - { - "name": "Josh Ponelat", - "email": "jponelat@gmail.com" - }, - { - "name": "Kyle Shockey", - "email": "kyleshockey1@gmail.com" - }, - { - "name": "Robert Barnwell", - "email": "robert@robertismy.name" - }, - { - "name": "Sahar Jafari", - "email": "shr.jafari@gmail.com" - } - ], - "description": " Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.", - "homepage": "http://swagger.io", - "keywords": [ - "api", - "documentation", - "openapi", - "specification", - "swagger", - "ui" - ], - "support": { - "issues": "https://github.com/swagger-api/swagger-ui/issues", - "source": "https://github.com/swagger-api/swagger-ui/tree/v3.50.0" - }, - "time": "2021-06-03T21:00:28+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "time": "2021-03-09T12:30:35+00:00" - }, - { - "name": "symfony/console", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "a62acecdf5b50e314a4f305cd01b5282126f3095" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a62acecdf5b50e314a4f305cd01b5282126f3095", - "reference": "a62acecdf5b50e314a4f305cd01b5282126f3095", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", - "symfony/lock": "<4.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/console/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T11:20:16+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v5.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:40:38+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/a8d2d5c94438548bff9f998ca874e202bb29d07f", - "reference": "a8d2d5c94438548bff9f998ca874e202bb29d07f", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "310a756cec00d29d89a08518405aded046a54a8b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/310a756cec00d29d89a08518405aded046a54a8b", - "reference": "310a756cec00d29d89a08518405aded046a54a8b", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/debug": "^4.4.5", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "047773e7016e4fd45102cedf4bd2558ae0d0c32f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/047773e7016e4fd45102cedf4bd2558ae0d0c32f", - "reference": "047773e7016e4fd45102cedf4bd2558ae0d0c32f", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "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/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-07-06T13:19:58+00:00" - }, - { - "name": "symfony/finder", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ed33314396d968a8936c95f5bd1b88bd3b3e94a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ed33314396d968a8936c95f5bd1b88bd3b3e94a3", - "reference": "ed33314396d968a8936c95f5bd1b88bd3b3e94a3", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T11:20:16+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-04-11T23:07:08+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "0c79d5a65ace4fe66e49702658c024a419d2438b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0c79d5a65ace4fe66e49702658c024a419d2438b", - "reference": "0c79d5a65ace4fe66e49702658c024a419d2438b", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T11:20:16+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "3795165596fe81a52296b78c9aae938d434069cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3795165596fe81a52296b78c9aae938d434069cc", - "reference": "3795165596fe81a52296b78c9aae938d434069cc", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/console": ">=5", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "twig/twig": "<1.43|<2.13,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.3|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/routing": "^3.4|^4.0|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^1.43|^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "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/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-01T07:12:08+00:00" - }, - { - "name": "symfony/mime", - "version": "v5.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/47dd7912152b82d0d4c8d9040dbc93d6232d472a", - "reference": "47dd7912152b82d0d4c8d9040dbc93d6232d472a", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v5.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-09T10:58:01+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:17:38+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/process", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "cd61e6dd273975c6625316de9d141ebd197f93c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cd61e6dd273975c6625316de9d141ebd197f93c9", - "reference": "cd61e6dd273975c6625316de9d141ebd197f93c9", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T11:20:16+00:00" - }, - { - "name": "symfony/routing", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "3a3c2f197ad0846ac6413225fc78868ba1c61434" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3a3c2f197ad0846ac6413225fc78868ba1c61434", - "reference": "3a3c2f197ad0846ac6413225fc78868ba1c61434", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4", - "psr/log": "~1.0", - "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-04-01T10:43:52+00:00" - }, - { - "name": "symfony/translation", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "dfe132c5c6d89f90ce7f961742cc532e9ca16dd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/dfe132c5c6d89f90ce7f961742cc532e9ca16dd4", - "reference": "dfe132c5c6d89f90ce7f961742cc532e9ca16dd4", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/finder": "~2.8|~3.0|~4.0|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/intl": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "31ea689a8e7d2410016b0d25fc15a1ba05a6e2e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/31ea689a8e7d2410016b0d25fc15a1ba05a6e2e0", - "reference": "31ea689a8e7d2410016b0d25fc15a1ba05a6e2e0", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.43|^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:48:32+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v5.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "df663fb63bdcd7298373cbd431165ab031706cb2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df663fb63bdcd7298373cbd431165ab031706cb2", - "reference": "df663fb63bdcd7298373cbd431165ab031706cb2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" - }, - "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-09T10:57:10+00:00" - }, - { - "name": "symfony/yaml", - "version": "v4.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "81cdac5536925c1c4b7b50aabc9ff6330b9eb5fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/81cdac5536925c1c4b7b50aabc9ff6330b9eb5fc", - "reference": "81cdac5536925c1c4b7b50aabc9ff6330b9eb5fc", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v4.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:39:37+00:00" - }, - { - "name": "thecodingmachine/safe", - "version": "v1.3.3", - "source": { - "type": "git", - "url": "https://github.com/thecodingmachine/safe.git", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc", - "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "phpstan/phpstan": "^0.12", - "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^0.12" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.1-dev" - } - }, - "autoload": { - "psr-4": { - "Safe\\": [ - "lib/", - "deprecated/", - "generated/" - ] - }, - "files": [ - "deprecated/apc.php", - "deprecated/libevent.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "lib/special_cases.php", - "generated/apache.php", - "generated/apcu.php", - "generated/array.php", - "generated/bzip2.php", - "generated/calendar.php", - "generated/classobj.php", - "generated/com.php", - "generated/cubrid.php", - "generated/curl.php", - "generated/datetime.php", - "generated/dir.php", - "generated/eio.php", - "generated/errorfunc.php", - "generated/exec.php", - "generated/fileinfo.php", - "generated/filesystem.php", - "generated/filter.php", - "generated/fpm.php", - "generated/ftp.php", - "generated/funchand.php", - "generated/gmp.php", - "generated/gnupg.php", - "generated/hash.php", - "generated/ibase.php", - "generated/ibmDb2.php", - "generated/iconv.php", - "generated/image.php", - "generated/imap.php", - "generated/info.php", - "generated/ingres-ii.php", - "generated/inotify.php", - "generated/json.php", - "generated/ldap.php", - "generated/libxml.php", - "generated/lzf.php", - "generated/mailparse.php", - "generated/mbstring.php", - "generated/misc.php", - "generated/msql.php", - "generated/mysql.php", - "generated/mysqli.php", - "generated/mysqlndMs.php", - "generated/mysqlndQc.php", - "generated/network.php", - "generated/oci8.php", - "generated/opcache.php", - "generated/openssl.php", - "generated/outcontrol.php", - "generated/password.php", - "generated/pcntl.php", - "generated/pcre.php", - "generated/pdf.php", - "generated/pgsql.php", - "generated/posix.php", - "generated/ps.php", - "generated/pspell.php", - "generated/readline.php", - "generated/rpminfo.php", - "generated/rrd.php", - "generated/sem.php", - "generated/session.php", - "generated/shmop.php", - "generated/simplexml.php", - "generated/sockets.php", - "generated/sodium.php", - "generated/solr.php", - "generated/spl.php", - "generated/sqlsrv.php", - "generated/ssdeep.php", - "generated/ssh2.php", - "generated/stream.php", - "generated/strings.php", - "generated/swoole.php", - "generated/uodbc.php", - "generated/uopz.php", - "generated/url.php", - "generated/var.php", - "generated/xdiff.php", - "generated/xml.php", - "generated/xmlrpc.php", - "generated/yaml.php", - "generated/yaz.php", - "generated/zip.php", - "generated/zlib.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP core functions that throw exceptions instead of returning FALSE on error", - "support": { - "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3" - }, - "time": "2020-10-28T17:51:34+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" - }, - "time": "2020-07-13T06:12:54+00:00" - }, - { - "name": "tymon/jwt-auth", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/tymondesigns/jwt-auth.git", - "reference": "e588cb719539366c0e2f6017f975379cb73e9680" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/e588cb719539366c0e2f6017f975379cb73e9680", - "reference": "e588cb719539366c0e2f6017f975379cb73e9680", - "shasum": "" - }, - "require": { - "illuminate/auth": "^5.2|^6|^7|^8", - "illuminate/contracts": "^5.2|^6|^7|^8", - "illuminate/http": "^5.2|^6|^7|^8", - "illuminate/support": "^5.2|^6|^7|^8", - "lcobucci/jwt": "<3.4", - "namshi/jose": "^7.0", - "nesbot/carbon": "^1.0|^2.0", - "php": "^5.5.9|^7.0" - }, - "require-dev": { - "illuminate/console": "^5.2|^6|^7|^8", - "illuminate/database": "^5.2|^6|^7|^8", - "illuminate/routing": "^5.2|^6|^7|^8", - "mockery/mockery": ">=0.9.9", - "phpunit/phpunit": "~4.8|~6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "1.0-dev" - }, - "laravel": { - "aliases": { - "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", - "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory" - }, - "providers": [ - "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Tymon\\JWTAuth\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sean Tymon", - "email": "tymon148@gmail.com", - "homepage": "https://tymon.xyz", - "role": "Developer" - } - ], - "description": "JSON Web Token Authentication for Laravel and Lumen", - "homepage": "https://github.com/tymondesigns/jwt-auth", - "keywords": [ - "Authentication", - "JSON Web Token", - "auth", - "jwt", - "laravel" - ], - "support": { - "issues": "https://github.com/tymondesigns/jwt-auth/issues", - "source": "https://github.com/tymondesigns/jwt-auth" - }, - "funding": [ - { - "url": "https://www.patreon.com/seantymon", - "type": "patreon" - } - ], - "time": "2020-11-27T12:32:42+00:00" - }, - { - "name": "unisharp/laravel-filemanager", - "version": "v2.2.0", - "source": { - "type": "git", - "url": "https://github.com/UniSharp/laravel-filemanager.git", - "reference": "34202590a88ecfc598c6dc70dae8b306710d4df2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/UniSharp/laravel-filemanager/zipball/34202590a88ecfc598c6dc70dae8b306710d4df2", - "reference": "34202590a88ecfc598c6dc70dae8b306710d4df2", - "shasum": "" - }, - "require": { - "ext-exif": "*", - "ext-fileinfo": "*", - "illuminate/config": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0", - "illuminate/container": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0", - "illuminate/filesystem": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0", - "illuminate/http": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0", - "illuminate/support": "5.4.* || 5.5.* || 5.6.* || 5.7.* || 5.8.* || ^6.0 || ^7.0 || ^8.0", - "intervention/image": "2.*", - "php": ">=7.2.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.9", - "phpunit/phpunit": "^6.2", - "squizlabs/php_codesniffer": "^3.1" - }, - "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "UniSharp\\LaravelFilemanager\\LaravelFilemanagerServiceProvider" - ], - "aliases": [] - } - }, - "autoload": { - "psr-4": { - "UniSharp\\LaravelFilemanager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Trevor Sawler", - "email": "trevor.sawler@gmail.com" - }, - { - "name": "UniSharp Ltd.", - "email": "opensource@unisharp.com" - } - ], - "description": "A file upload/editor intended for use with Laravel 5 to 6 and CKEditor / TinyMCE", - "keywords": [ - "CKEditor", - "file", - "filemanager", - "image", - "laravel", - "manager", - "tinymce", - "upload" - ], - "support": { - "issues": "https://github.com/UniSharp/laravel-filemanager/issues", - "source": "https://github.com/UniSharp/laravel-filemanager/tree/v2.2.0" - }, - "time": "2020-11-16T10:51:46+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v3.6.8", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "5e679f7616db829358341e2d5cccbd18773bdab8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/5e679f7616db829358341e2d5cccbd18773bdab8", - "reference": "5e679f7616db829358341e2d5cccbd18773bdab8", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.5.2", - "symfony/polyfill-ctype": "^1.17" - }, - "require-dev": { - "ext-filter": "*", - "ext-pcre": "*", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator.", - "ext-pcre": "Required to use most of the library." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v3.6.8" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2021-01-20T14:39:46+00:00" - }, - { - "name": "webonyx/graphql-php", - "version": "v14.9.0", - "source": { - "type": "git", - "url": "https://github.com/webonyx/graphql-php.git", - "reference": "36b83621deb5eae354347a2e86dc7aec81b32a82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/36b83621deb5eae354347a2e86dc7aec81b32a82", - "reference": "36b83621deb5eae354347a2e86dc7aec81b32a82", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^7.1||^8.0" - }, - "require-dev": { - "amphp/amp": "^2.3", - "doctrine/coding-standard": "^6.0", - "nyholm/psr7": "^1.2", - "phpbench/phpbench": "^0.16.10", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "0.12.82", - "phpstan/phpstan-phpunit": "0.12.18", - "phpstan/phpstan-strict-rules": "0.12.9", - "phpunit/phpunit": "^7.2|^8.5", - "psr/http-message": "^1.0", - "react/promise": "2.*", - "simpod/php-coveralls-mirror": "^3.0", - "squizlabs/php_codesniffer": "3.5.4" - }, - "suggest": { - "psr/http-message": "To use standard GraphQL server", - "react/promise": "To leverage async resolving on React PHP platform" - }, - "type": "library", - "autoload": { - "psr-4": { - "GraphQL\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP port of GraphQL reference implementation", - "homepage": "https://github.com/webonyx/graphql-php", - "keywords": [ - "api", - "graphql" - ], - "support": { - "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v14.9.0" - }, - "funding": [ - { - "url": "https://opencollective.com/webonyx-graphql-php", - "type": "open_collective" - } - ], - "time": "2021-06-15T16:14:17+00:00" - }, - { - "name": "webpatser/laravel-uuid", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/webpatser/laravel-uuid.git", - "reference": "a7ce65cdabbc9970fc2a87fdf67b48e0b1641d23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webpatser/laravel-uuid/zipball/a7ce65cdabbc9970fc2a87fdf67b48e0b1641d23", - "reference": "a7ce65cdabbc9970fc2a87fdf67b48e0b1641d23", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "fzaninotto/faker": "~1.4", - "phpunit/phpunit": "~6.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Webpatser\\Uuid\\UuidServiceProvider" - ], - "aliases": { - "Uuid": "Webpatser\\Uuid\\Uuid" - } - } - }, - "autoload": { - "psr-0": { - "Webpatser\\Uuid": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christoph Kempen", - "email": "christoph@downsized.nl" - } - ], - "description": "Laravel package to generate and to validate a universally unique identifier (UUID) according to the RFC 4122 standard. Support for version 1, 3, 4 and 5 UUIDs are built-in.", - "homepage": "https://github.com/webpatser/uuid", - "keywords": [ - "UUID RFC4122" - ], - "support": { - "issues": "https://github.com/webpatser/uuid/issues", - "source": "https://github.com/webpatser/uuid" - }, - "time": "2017-10-04T07:47:40+00:00" - }, - { - "name": "zircote/swagger-php", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/zircote/swagger-php.git", - "reference": "eef1dd98e6f6071573908fd7007270510051e5f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/eef1dd98e6f6071573908fd7007270510051e5f9", - "reference": "eef1dd98e6f6071573908fd7007270510051e5f9", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.7", - "ext-json": "*", - "php": ">=7.2", - "symfony/finder": ">=2.2", - "symfony/yaml": ">=3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "phpunit/phpunit": ">=8" - }, - "bin": [ - "bin/openapi" - ], - "type": "library", - "autoload": { - "psr-4": { - "OpenApi\\": "src" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Robert Allen", - "email": "zircote@gmail.com" - }, - { - "name": "Bob Fanger", - "email": "bfanger@gmail.com", - "homepage": "https://bfanger.nl" - }, - { - "name": "Martin Rademacher", - "email": "mano@radebatz.net", - "homepage": "https://radebatz.net" - } - ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", - "keywords": [ - "api", - "json", - "rest", - "service discovery" - ], - "support": { - "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/3.2.1" - }, - "time": "2021-05-20T21:46:24+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "alpha", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.1.0" -} diff --git a/src/Badaso.php b/src/Badaso.php index 7d87bd607..a6d245a62 100644 --- a/src/Badaso.php +++ b/src/Badaso.php @@ -77,7 +77,6 @@ class Badaso 'password_resets', 'menus', 'menu_items', - 'users', 'roles', 'permissions', 'configurations', @@ -96,155 +95,155 @@ class Badaso { "title": "Frequently used", "group": [ - { - "label": "Integer", - "value": "integer" - }, - { - "label": "Varchar", - "value": "varchar" - }, - { - "label": "Text", - "value": "text" - }, - { - "label": "Date", - "value": "date" - } + { + "label": "Integer", + "value": "integer" + }, + { + "label": "Varchar", + "value": "varchar" + }, + { + "label": "Text", + "value": "text" + }, + { + "label": "Date", + "value": "date" + } ] }, { "title": "Numeric", "group": [ - { - "label": "Tiny Integer", - "value": "tinyint" - }, - { - "label": "Small Integer", - "value": "smallint" - }, - { - "label": "Medium Integer", - "value": "mediumint" - }, - { - "label": "Big Integer", - "value": "bigint" - }, - { - "label": "Decimal", - "value": "decimal" - }, - { - "label": "Float", - "value": "float" - }, - { - "label": "Double", - "value": "double" - }, - { - "label": "Boolean", - "value": "boolean" - } + { + "label": "Tiny Integer", + "value": "tinyint" + }, + { + "label": "Small Integer", + "value": "smallint" + }, + { + "label": "Medium Integer", + "value": "mediumint" + }, + { + "label": "Big Integer", + "value": "bigint" + }, + { + "label": "Decimal", + "value": "decimal" + }, + { + "label": "Float", + "value": "float" + }, + { + "label": "Double", + "value": "double" + }, + { + "label": "Boolean", + "value": "boolean" + } ] }, { "title": "Date and Time", "group": [ - { - "label": "Datetime", - "value": "datetime" - }, - { - "label": "Time", - "value": "time" - }, - { - "label": "Year", - "value": "year" - }, - { - "label": "Timestamp", - "value": "timestamp" - } + { + "label": "Datetime", + "value": "datetime" + }, + { + "label": "Time", + "value": "time" + }, + { + "label": "Year", + "value": "year" + }, + { + "label": "Timestamp", + "value": "timestamp" + } ] }, { "title": "String", "group": [ - { - "label": "Char", - "value": "char" - }, - { - "label": "Medium Text", - "value": "mediumtext" - }, - { - "label": "Long Text", - "value": "longtext" - }, - { - "label": "BLOB", - "value": "blob" - }, - { - "label": "Enum", - "value": "enum" - }, - { - "label": "Set", - "value": "set" - } + { + "label": "Char", + "value": "char" + }, + { + "label": "Medium Text", + "value": "mediumtext" + }, + { + "label": "Long Text", + "value": "longtext" + }, + { + "label": "BLOB", + "value": "blob" + }, + { + "label": "Enum", + "value": "enum" + }, + { + "label": "Set", + "value": "set" + } ] }, { "title": "Spatial", "group": [ - { - "label": "Geometry", - "value": "geometry" - }, - { - "label": "Point", - "value": "point" - }, - { - "label": "Multi Point", - "value": "multipoint" - }, - { - "label": "Polygon", - "value": "polygon" - }, - { - "label": "Multi Polygon", - "value": "multipolygon" - }, - { - "label": "Linestring", - "value": "linestring" - }, - { - "label": "Multi Linestring", - "value": "multilinestring" - }, - { - "label": "Geometry Collection", - "value": "geometrycollection" - } + { + "label": "Geometry", + "value": "geometry" + }, + { + "label": "Point", + "value": "point" + }, + { + "label": "Multi Point", + "value": "multipoint" + }, + { + "label": "Polygon", + "value": "polygon" + }, + { + "label": "Multi Polygon", + "value": "multipolygon" + }, + { + "label": "Linestring", + "value": "linestring" + }, + { + "label": "Multi Linestring", + "value": "multilinestring" + }, + { + "label": "Geometry Collection", + "value": "geometrycollection" + } ] }, { "title": "JSON", "group": [ - { - "label": "JSON", - "value": "json" - } + { + "label": "JSON", + "value": "json" + } ] } ]'; @@ -274,9 +273,15 @@ public function getSupportedTableRelations() return $this->supported_table_relations; } - public function getProtectedTables() + public static function getProtectedTables() { - return config('badaso-hidden-tables', []); + return array_map(function ($table) { + if (in_array($table, ['activity_log', 'failed_jobs', 'migrations'])) { + return $table; + } + + return config('badaso.database.prefix').$table; + }, config('badaso-hidden-tables', [])); } public function getBadasoCloudApi() @@ -299,6 +304,11 @@ public function getBadasoDbmsFieldType() return $this->badaso_dbms_field_type; } + public static function getBadasoTablePrefix() + { + return config('badaso.database.prefix'); + } + public function getConfig($key, $default_value = null) { $value = config($key); diff --git a/src/Commands/BadasoSetup.php b/src/Commands/BadasoSetup.php index 2b9da8491..dc6117d9f 100644 --- a/src/Commands/BadasoSetup.php +++ b/src/Commands/BadasoSetup.php @@ -288,6 +288,7 @@ protected function envListUpload() 'MIX_ANALYTICS_TRACKING_ID' => '', 'MIX_API_DOCUMENTATION_ANNOTATION_ROUTE' => 'api-annotation', 'MIX_API_DOCUMENTATION_ROUTE' => 'api-docs', + 'BADASO_TABLE_PREFIX' => 'badaso_', ]; } diff --git a/src/Config/badaso-hidden-tables.php b/src/Config/badaso-hidden-tables.php index 9618f490d..35c33c0b9 100644 --- a/src/Config/badaso-hidden-tables.php +++ b/src/Config/badaso-hidden-tables.php @@ -18,4 +18,5 @@ 'email_resets', 'f_c_m_messages', 'firebase_cloud_messages', + 'failed_jobs', ]; diff --git a/src/Config/badaso.php b/src/Config/badaso.php index 779df4656..ac578de4f 100644 --- a/src/Config/badaso.php +++ b/src/Config/badaso.php @@ -6,6 +6,9 @@ 'default_menu' => env('MIX_DEFAULT_MENU', 'admin'), 'api_route_prefix' => env('MIX_API_ROUTE_PREFIX', 'badaso-api'), 'license_key' => env('BADASO_LICENSE_KEY'), + 'database' => [ + 'prefix' => env('BADASO_TABLE_PREFIX', 'badaso_'), + ], 'storage' => [ 'disk' => env('FILESYSTEM_DRIVER', 'public'), ], diff --git a/src/ContentManager/FileGenerator.php b/src/ContentManager/FileGenerator.php index a614438dc..01b91d25e 100644 --- a/src/ContentManager/FileGenerator.php +++ b/src/ContentManager/FileGenerator.php @@ -287,7 +287,7 @@ public function repackSeedData($data): array /** * Generate Badaso Migration File. */ - public function generateBDOMigrationFile(string $table_name, string $prefix, array $rows): string + public function generateBDOMigrationFile(string $table_name, string $prefix, array $rows, array $relations = []): string { $migration_class_name = $this->file_system->generateMigrationClassName($table_name, $prefix); @@ -301,8 +301,15 @@ public function generateBDOMigrationFile(string $table_name, string $prefix, arr $migration_file = $this->file_system->getMigrationFile($migration_file_name, $migration_folder_path); - $schema_up = $this->migration_parser->getMigrationSchemaUp($table_name, $rows, $prefix); - $schema_down = $this->migration_parser->getMigrationSchemaDown($table_name, $rows, $prefix); + $schema_up = ''; + $schema_down = ''; + + $schema_up .= $this->migration_parser->getMigrationSchemaUp($table_name, $rows, $prefix); + if (! empty($relations)) { + $schema_up .= PHP_EOL.PHP_EOL.$this->migration_parser->getMigrationRelationshipSchemaUp($table_name, $relations); + $schema_down .= $this->migration_parser->getMigrationRelationshipSchemaDown($table_name, $relations).PHP_EOL.PHP_EOL; + } + $schema_down .= $this->migration_parser->getMigrationSchemaDown($table_name, $rows, $prefix); $stub = $this->content_manager->replaceString('{{class}}', $migration_class_name, $stub); $stub = $this->content_manager->replaceString('{{schema_up}}', $schema_up, $stub); @@ -324,7 +331,7 @@ public function deleteMigrationFiles(string $file_name) /** * Generate Badaso Alter Migration File. */ - public function generateBDOAlterMigrationFile(array $table, array $rows = null, string $prefix): string + public function generateBDOAlterMigrationFile(array $table, array $rows = null, string $prefix, array $relations = []): string { $migration_class_name = $this->file_system->generateAlterMigrationClassName($table, $prefix); @@ -337,8 +344,16 @@ public function generateBDOAlterMigrationFile(array $table, array $rows = null, $migration_folder_path = $this->file_system->getMigrationFolderPath(); $migration_file = $this->file_system->getMigrationFile($migration_file_name, $migration_folder_path); - $schema_up = $this->migration_parser->getAlterMigrationSchemaUp($table, $rows, $prefix); - $schema_down = $this->migration_parser->getAlterMigrationSchemaDown($table, $rows, $prefix); + + $schema_up = ''; + $schema_down = ''; + + $schema_up .= $this->migration_parser->getAlterMigrationSchemaUp($table, $rows, $prefix, $relations); + if (array_key_exists('current_relations', $relations) && count($relations['current_relations']) > 0) { + $schema_up .= $this->migration_parser->getAlterMigrationRelationshipSchemaUp($table, $relations); + $schema_down .= $this->migration_parser->getAlterMigrationRelationshipSchemaDown($table, $relations).PHP_EOL; + } + $schema_down .= $this->migration_parser->getAlterMigrationSchemaDown($table, $rows, $prefix, $relations); $stub = $this->content_manager->replaceString('{{class}}', $migration_class_name, $stub); $stub = $this->content_manager->replaceString('{{schema_up}}', $schema_up, $stub); diff --git a/src/Controllers/BadasoAuthController.php b/src/Controllers/BadasoAuthController.php index 19c5e9316..d93d6caca 100644 --- a/src/Controllers/BadasoAuthController.php +++ b/src/Controllers/BadasoAuthController.php @@ -19,6 +19,7 @@ use Uasoft\Badaso\Mail\SendUserVerification; use Uasoft\Badaso\Middleware\BadasoAuthenticate; use Uasoft\Badaso\Models\EmailReset; +use Uasoft\Badaso\Models\PasswordReset; use Uasoft\Badaso\Models\Role; use Uasoft\Badaso\Models\User; use Uasoft\Badaso\Models\UserRole; @@ -91,7 +92,7 @@ public function register(Request $request) DB::beginTransaction(); $request->validate([ 'name' => 'required|string|max:255', - 'email' => 'required|string|email|max:255|unique:users', + 'email' => 'required|string|email|max:255|unique:Uasoft\Badaso\Models\User', 'password' => 'required|string|min:6|confirmed', ]); @@ -193,7 +194,7 @@ public function verify(Request $request) { try { $request->validate([ - 'email' => ['required', 'exists:users'], + 'email' => ['required', 'exists:Uasoft\Badaso\Models\User'], 'token' => ['required'], ]); @@ -245,7 +246,6 @@ function ($attribute, $value, $fail) use ($user) { 'confirmed', 'string', 'min:6', - 'confirmed', function ($attribute, $value, $fail) use ($user) { if (Hash::check($value, $user->password)) { $fail(__('badaso::validation.auth.password_not_changes')); @@ -268,12 +268,12 @@ public function forgetPassword(Request $request) { try { $request->validate([ - 'email' => ['required', 'email', 'exists:users,email'], + 'email' => ['required', 'email', 'exists:Uasoft\Badaso\Models\User,email'], ]); $token = rand(111111, 999999); - DB::table('password_resets')->insert([ + PasswordReset::insert([ 'email' => $request->email, 'token' => $token, 'created_at' => date('Y-m-d H:i:s'), @@ -292,15 +292,12 @@ public function validateTokenForgetPassword(Request $request) { try { $request->validate([ - 'email' => ['required', 'email', 'exists:users,email'], + 'email' => ['required', 'email', 'exists:Uasoft\Badaso\Models\User,email'], 'token' => [ 'required', - 'exists:password_resets,token', + 'exists:Uasoft\Badaso\Models\PasswordReset,token', function ($attribute, $value, $fail) use ($request) { - $password_resets = DB::SELECT('SELECT * FROM password_resets WHERE token = :token AND email = :email', [ - 'token' => $request->token, - 'email' => $request->email, - ]); + $password_resets = PasswordReset::where('token', $request->token)->where('email', $request->email)->get(); $password_reset = collect($password_resets)->first(); if (is_null($password_reset)) { $fail('Token or Email invalid'); @@ -319,15 +316,12 @@ public function resetPassword(Request $request) { try { $request->validate([ - 'email' => ['required', 'email', 'exists:users,email'], + 'email' => ['required', 'email', 'exists:Uasoft\Badaso\Models\User,email'], 'token' => [ 'required', - 'exists:password_resets,token', + 'exists:Uasoft\Badaso\Models\PasswordReset,token', function ($attribute, $value, $fail) use ($request) { - $password_resets = DB::SELECT('SELECT * FROM password_resets WHERE token = :token AND email = :email', [ - 'token' => $request->token, - 'email' => $request->email, - ]); + $password_resets = PasswordReset::where('token', $request->token)->where('email', $request->email)->get(); $password_reset = collect($password_resets)->first(); if (is_null($password_reset)) { $fail('Token or Email invalid'); @@ -336,10 +330,7 @@ function ($attribute, $value, $fail) use ($request) { ], ]); - $password_resets = DB::SELECT('SELECT * FROM password_resets WHERE token = :token AND email = :email', [ - 'token' => $request->token, - 'email' => $request->email, - ]); + $password_resets = PasswordReset::where('token', $request->token)->where('email', $request->email)->get(); $password_reset = collect($password_resets)->first(); @@ -358,7 +349,7 @@ function ($attribute, $value, $fail) use ($password_reset) { $saved = $user->save(); if ($saved) { - DB::table('password_resets')->where('token', $request->token)->delete(); + PasswordReset::where('token', $request->token)->delete(); } return ApiResponse::success(); @@ -460,7 +451,7 @@ public function updateEmail(Request $request) } $request->validate([ - 'email' => 'required|email|unique:users,email', + 'email' => 'required|email|unique:Uasoft\Badaso\Models\User,email', ]); $user = User::find($user->id); @@ -516,7 +507,7 @@ public function verifyEmail(Request $request) } $request->validate([ - 'email' => ['required', 'unique:users', 'email'], + 'email' => ['required', 'unique:Uasoft\Badaso\Models\User', 'email'], 'token' => ['required'], ]); diff --git a/src/Controllers/BadasoBaseController.php b/src/Controllers/BadasoBaseController.php index 5773bad53..b567fe7b0 100644 --- a/src/Controllers/BadasoBaseController.php +++ b/src/Controllers/BadasoBaseController.php @@ -368,7 +368,7 @@ public function setMaintenanceState(Request $request) DB::beginTransaction(); try { $request->validate([ - 'slug' => 'required|exists:data_types,slug', + 'slug' => 'required|exists:Uasoft\Badaso\Models\DataType,slug', 'is_maintenance' => 'required', ]); diff --git a/src/Controllers/BadasoCRUDController.php b/src/Controllers/BadasoCRUDController.php index 7c5f7a154..069104806 100644 --- a/src/Controllers/BadasoCRUDController.php +++ b/src/Controllers/BadasoCRUDController.php @@ -61,7 +61,7 @@ public function read(Request $request) { try { $request->validate([ - 'table' => 'required|exists:data_types,name', + 'table' => 'required|exists:Uasoft\Badaso\Models\DataType,name', ]); $table = $request->input('table', ''); $data_type = Badaso::model('DataType')::where('name', $table)->first(); @@ -105,7 +105,7 @@ public function readBySlug(Request $request) { try { $request->validate([ - 'slug' => 'required|exists:data_types,slug', + 'slug' => 'required|exists:Uasoft\Badaso\Models\DataType,slug', ]); $slug = $request->input('slug', ''); $data_type = Badaso::model('DataType')::where('slug', $slug)->first(); @@ -128,10 +128,10 @@ public function edit(Request $request) try { $request->validate([ - 'id' => 'required|exists:data_types', + 'id' => 'required|exists:Uasoft\Badaso\Models\DataType', 'name' => [ 'required', - "unique:data_types,name,{$request->id}", + "unique:Uasoft\Badaso\Models\DataType,name,{$request->id}", function ($attribute, $value, $fail) { if (! Schema::hasTable($value)) { $fail(__('badaso::validation.crud.table_not_found', ['table' => $value])); @@ -275,7 +275,7 @@ public function add(Request $request) $request->validate([ 'name' => [ 'required', - 'unique:data_types', + 'unique:Uasoft\Badaso\Models\DataType', function ($attribute, $value, $fail) { if (! Schema::hasTable($value)) { $fail(__('badaso::validation.crud.table_not_found', ['table' => $value])); @@ -405,7 +405,7 @@ public function delete(Request $request) try { $request->validate([ - 'id' => 'required|exists:data_types,id', + 'id' => 'required|exists:Uasoft\Badaso\Models\DataType,id', ]); $data_type = DataType::find($request->id); diff --git a/src/Controllers/BadasoConfigurationsController.php b/src/Controllers/BadasoConfigurationsController.php index 52c8ebe76..3552adf90 100644 --- a/src/Controllers/BadasoConfigurationsController.php +++ b/src/Controllers/BadasoConfigurationsController.php @@ -147,7 +147,7 @@ public function add(Request $request) try { $request->validate([ - 'key' => 'required|unique:configurations', + 'key' => 'required|unique:Uasoft\Badaso\Models\Configuration', 'display_name' => 'required', 'group' => 'required', 'type' => 'required', diff --git a/src/Controllers/BadasoDatabaseController.php b/src/Controllers/BadasoDatabaseController.php index 59924fc89..c565d3f30 100644 --- a/src/Controllers/BadasoDatabaseController.php +++ b/src/Controllers/BadasoDatabaseController.php @@ -32,7 +32,7 @@ public function add(Request $request) $request->validate([ 'table' => [ 'required', - 'unique:data_types,slug', + 'unique:Uasoft\Badaso\Models\DataType,slug', function ($attribute, $value, $fail) { if (Schema::hasTable($value)) { $fail(__('badaso::validation.database.table_already_exists', ['table' => $value])); @@ -45,7 +45,7 @@ function ($attribute, $value, $fail) { 'rows.*.field_type' => 'required|string', ]); - $this->file_name = $this->file_generator->generateBDOMigrationFile($request->table, 'create', $request->rows); + $this->file_name = $this->file_generator->generateBDOMigrationFile($request->table, 'create', $request->rows, $request->relations); $exitCode = Artisan::call('migrate', [ '--path' => 'database/migrations/badaso/', @@ -89,8 +89,19 @@ function ($attribute, $value, $fail) { ]); $columns = SchemaManager::describeTable($request->table)->toArray(); + $columnsFK = SchemaManager::getDoctrineForeignKeys($request->table); + $fKConstraints = []; + foreach ($columnsFK as $columnFK) { + $fKConstraints[$columnFK->getUnquotedLocalColumns()[0]] = [ + 'source_field' => $columnFK->getUnquotedLocalColumns()[0], + 'target_table' => $columnFK->getForeignTableName(), + 'target_field' => $columnFK->getForeignColumns()[0], + 'on_delete' => strtolower($columnFK->getOption('onDelete')), + 'on_update' => strtolower($columnFK->getOption('onUpdate')), + ]; + } - return ApiResponse::success(['columns' => $columns]); + return ApiResponse::success(['columns' => $columns, 'columnsFK' => $fKConstraints]); } catch (Exception $e) { return APIResponse::failed($e); } @@ -114,15 +125,16 @@ function ($attribute, $value, $fail) { Rule::notIn(Badaso::getProtectedTables()), ], 'fields.current_fields' => 'required|array', - 'fields.modified_fields' => 'nullable|array', + 'fields.modified_fields' => 'required|array', ]); $data = $request->all(); $fields = $data['fields']; $table = $data['table']; + $relations = $data['relations']; - if (count($fields['current_fields']) > 0) { - $this->file_name[] = $this->file_generator->generateBDOAlterMigrationFile($table, $fields, 'alter'); + if (count($fields['modified_fields']) > 0) { + $this->file_name[] = $this->file_generator->generateBDOAlterMigrationFile($table, $fields, 'alter', $relations); } if ($table['current_name'] !== $table['modified_name']) { diff --git a/src/Controllers/BadasoMenuController.php b/src/Controllers/BadasoMenuController.php index 82ca2e645..bc45edfb5 100644 --- a/src/Controllers/BadasoMenuController.php +++ b/src/Controllers/BadasoMenuController.php @@ -33,10 +33,11 @@ public function browseMenuItem(Request $request) $request->validate([ 'menu_id' => ['required'], ]); + $prefix = config('badaso.database.prefix'); $menu_items = MenuItem::where('menu_id', $request->menu_id) ->orderBy('order', 'asc') - ->whereNull('menu_items.parent_id') + ->whereNull($prefix.'menu_items.parent_id') ->get(); $menu_items = $this->getChildMenuItems($menu_items); @@ -53,7 +54,7 @@ public function readMenu(Request $request) { try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], ]); $menu = Menu::find($request->menu_id); @@ -69,8 +70,8 @@ public function readMenuItem(Request $request) { try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], ]); $menu_item = MenuItem::where('menu_id', $request->menu_id)->where('id', $request->menu_item_id)->first(); @@ -87,15 +88,16 @@ public function browseMenuItemByKey(Request $request) { try { $request->validate([ - 'menu_key' => ['required', 'exists:menus,key'], + 'menu_key' => ['required', 'exists:Uasoft\Badaso\Models\Menu,key'], ]); + $prefix = config('badaso.database.prefix'); $menu = Menu::where('key', $request->menu_key)->first(); - $all_menu_items = MenuItem::join('menus', 'menus.id', 'menu_items.menu_id') - ->where('menus.key', $request->menu_key) - ->whereNull('menu_items.parent_id') - ->select('menu_items.*') - ->orderBy('menu_items.order', 'asc') + $all_menu_items = MenuItem::join($prefix.'menus', $prefix.'menus.id', $prefix.'menu_items.menu_id') + ->where($prefix.'menus.key', $request->menu_key) + ->whereNull($prefix.'menu_items.parent_id') + ->select($prefix.'menu_items.*') + ->orderBy($prefix.'menu_items.order', 'asc') ->get(); $menu_items = []; foreach ($all_menu_items as $menu_item) { @@ -121,17 +123,17 @@ public function browseMenuItemByKeys(Request $request) $request->validate([ 'menu_key' => ['required'], ]); - + $prefix = config('badaso.database.prefix'); $menu_keys = explode(',', $request->menu_key); foreach ($menu_keys as $key => $menu_key) { $menu = Menu::where('key', $menu_key)->first(); - $all_menu_items = MenuItem::join('menus', 'menus.id', 'menu_items.menu_id') - ->where('menus.key', $menu_key) - ->whereNull('menu_items.parent_id') - ->select('menu_items.*') - ->orderBy('menu_items.order', 'asc') + $all_menu_items = MenuItem::join($prefix.'menus', $prefix.'menus.id', $prefix.'menu_items.menu_id') + ->where($prefix.'menus.key', $menu_key) + ->whereNull($prefix.'menu_items.parent_id') + ->select($prefix.'menu_items.*') + ->orderBy($prefix.'menu_items.order', 'asc') ->get(); $menu_items = []; foreach ($all_menu_items as $menu_item) { @@ -180,7 +182,7 @@ public function addMenu(Request $request) try { $request->validate([ - 'key' => ['required', 'unique:menus'], + 'key' => ['required', 'unique:Uasoft\Badaso\Models\Menu'], 'display_name' => ['required'], ]); @@ -206,7 +208,7 @@ public function addMenuItem(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], 'title' => ['required'], 'url' => ['required'], 'target' => ['required'], @@ -244,8 +246,8 @@ public function editMenu(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'key' => ['required', "unique:menus,id,{$request->menu_id}"], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'key' => ['required', "unique:Uasoft\Badaso\Models\Menu,id,{$request->menu_id}"], 'display_name' => ['required'], ]); @@ -271,8 +273,8 @@ public function editMenuItem(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], 'title' => ['required'], 'url' => ['required'], 'target' => ['required'], @@ -308,8 +310,8 @@ public function editMenuItemOrder(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], ]); $menu_item = MenuItem::find($request->menu_item_id); $order = $request->get('order'); @@ -362,7 +364,7 @@ public function editMenuItemsOrder(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], 'menu_items' => ['required'], ]); @@ -397,7 +399,7 @@ public function deleteMenu(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], ]); Menu::find($request->menu_id)->delete(); @@ -418,8 +420,8 @@ public function deleteMenuItem(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], ]); MenuItem::find($request->menu_item_id)->delete(); @@ -438,8 +440,8 @@ public function getMenuItemPermissions(Request $request) { try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], ]); $menu_item = MenuItem::find($request->menu_item_id); @@ -474,8 +476,8 @@ public function setMenuItemPermissions(Request $request) try { $request->validate([ - 'menu_id' => ['required', 'exists:menus,id'], - 'menu_item_id' => ['required', 'exists:menu_items,id'], + 'menu_id' => ['required', 'exists:Uasoft\Badaso\Models\Menu,id'], + 'menu_item_id' => ['required', 'exists:Uasoft\Badaso\Models\MenuItem,id'], ]); $permission_ids = $request->get('permissions', []); diff --git a/src/Controllers/BadasoPermissionController.php b/src/Controllers/BadasoPermissionController.php index 44dae9e1c..6e8f550ec 100644 --- a/src/Controllers/BadasoPermissionController.php +++ b/src/Controllers/BadasoPermissionController.php @@ -27,7 +27,7 @@ public function read(Request $request) { try { $request->validate([ - 'id' => 'required|exists:permissions,id', + 'id' => 'required|exists:Uasoft\Badaso\Models\Permission,id', ]); $permission = Permission::find($request->id); @@ -48,13 +48,13 @@ public function edit(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:permissions,id', + 'exists:Uasoft\Badaso\Models\Permission,id', ], - 'key' => "required|unique:permissions,key,{$request->id}", - 'description' => 'required', + 'key' => "required|unique:Uasoft\Badaso\Models\Permission,key,{$request->id}", + 'description' => 'nullable', 'always_allow' => 'required', 'is_public' => 'required', - 'table_name' => 'required', + 'table_name' => 'nullable', ]); $permission = Permission::find($request->id); @@ -80,8 +80,8 @@ public function add(Request $request) try { $request->validate([ - 'key' => 'required|unique:permissions', - 'description' => 'required', + 'key' => 'required|unique:Uasoft\Badaso\Models\Permission', + 'description' => 'nullable', 'always_allow' => 'required', 'is_public' => 'required', ]); @@ -111,7 +111,7 @@ public function delete(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:permissions', + 'exists:Uasoft\Badaso\Models\Permission', ], ]); diff --git a/src/Controllers/BadasoRoleController.php b/src/Controllers/BadasoRoleController.php index a26cd7d67..fadeb644f 100644 --- a/src/Controllers/BadasoRoleController.php +++ b/src/Controllers/BadasoRoleController.php @@ -27,7 +27,7 @@ public function read(Request $request) { try { $request->validate([ - 'id' => 'required|exists:roles,id', + 'id' => 'required|exists:Uasoft\Badaso\Models\Role,id', ]); $role = Role::find($request->id); @@ -48,11 +48,11 @@ public function edit(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:roles,id', + 'exists:Uasoft\Badaso\Models\Role,id', ], - 'name' => "required|unique:roles,name,{$request->id}", + 'name' => "required|unique:Uasoft\Badaso\Models\Role,name,{$request->id}", 'display_name' => 'required', - 'description' => 'required', + 'description' => 'nullable', ]); $role = Role::find($request->id); @@ -77,9 +77,9 @@ public function add(Request $request) try { $request->validate([ - 'name' => 'required|unique:roles,name', + 'name' => 'required|unique:Uasoft\Badaso\Models\Role,name', 'display_name' => 'required', - 'description' => 'required', + 'description' => 'nullable', ]); $role = new Role(); @@ -106,7 +106,7 @@ public function delete(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:roles', + 'exists:Uasoft\Badaso\Models\Role', ], ]); diff --git a/src/Controllers/BadasoRolePermissionController.php b/src/Controllers/BadasoRolePermissionController.php index b49148910..a0a85c744 100644 --- a/src/Controllers/BadasoRolePermissionController.php +++ b/src/Controllers/BadasoRolePermissionController.php @@ -31,7 +31,7 @@ public function browseByRole(Request $request) { try { $request->validate([ - 'role_id' => 'required|exists:roles,id', + 'role_id' => 'required|exists:Uasoft\Badaso\Models\Role,id', ]); $role_permissions = RolePermission::where('role_id', $request->role_id)->get(); @@ -49,16 +49,17 @@ public function browseAllPermission(Request $request) { try { $request->validate([ - 'role_id' => 'required|exists:roles,id', + 'role_id' => 'required|exists:Uasoft\Badaso\Models\Role,id', ]); + $prefix = config('badaso.database.prefix'); $query = ' SELECT A.*, CASE WHEN B.role_id is not null then 1 else 0 END as selected - FROM permissions A - LEFT JOIN role_permissions B ON A.id = B.permission_id AND B.role_id = :role_id + FROM '.$prefix.'permissions A + LEFT JOIN '.$prefix.'role_permissions B ON A.id = B.permission_id AND B.role_id = :role_id '; $role_permissions = DB::select($query, [ 'role_id' => $request->role_id, @@ -76,7 +77,7 @@ public function addOrEdit(Request $request) { try { $request->validate([ - 'role_id' => 'required|exists:roles,id', + 'role_id' => 'required|exists:Uasoft\Badaso\Models\Role,id', 'permissions' => 'required', ]); $permissions = $request->permissions; diff --git a/src/Controllers/BadasoTableController.php b/src/Controllers/BadasoTableController.php index f49126297..c23ced063 100644 --- a/src/Controllers/BadasoTableController.php +++ b/src/Controllers/BadasoTableController.php @@ -143,7 +143,7 @@ public function getRelationDataBySlug(Request $request) { try { $request->validate([ - 'slug' => 'required|exists:data_types,slug', + 'slug' => 'required|exists:Uasoft\Badaso\Models\DataType,slug', ]); $slug = $request->input('slug', ''); $data_type = Badaso::model('DataType')::where('slug', $slug)->first(); diff --git a/src/Controllers/BadasoUserController.php b/src/Controllers/BadasoUserController.php index 56662c93a..41fca31a2 100644 --- a/src/Controllers/BadasoUserController.php +++ b/src/Controllers/BadasoUserController.php @@ -31,7 +31,7 @@ public function read(Request $request) { try { $request->validate([ - 'id' => 'required|exists:users,id', + 'id' => 'required|exists:Uasoft\Badaso\Models\User,id', ]); $user = User::find($request->id); @@ -54,9 +54,9 @@ public function edit(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:users,id', + 'exists:Uasoft\Badaso\Models\User,id', ], - 'email' => "required|email|unique:users,email,{$request->id}", + 'email' => "required|email|unique:Uasoft\Badaso\Models\User,email,{$request->id}", 'name' => 'required', 'avatar' => 'nullable', ]); @@ -91,7 +91,7 @@ public function add(Request $request) try { $request->validate([ - 'email' => 'required|email|unique:users', + 'email' => 'required|email|unique:Uasoft\Badaso\Models\User', 'name' => 'required', 'avatar' => 'nullable', ]); @@ -125,7 +125,7 @@ public function delete(Request $request) $request->validate([ 'id' => [ 'required', - 'exists:users', + 'exists:Uasoft\Badaso\Models\User', ], ]); diff --git a/src/Controllers/BadasoUserRoleController.php b/src/Controllers/BadasoUserRoleController.php index 2e95cd93a..f27260d03 100644 --- a/src/Controllers/BadasoUserRoleController.php +++ b/src/Controllers/BadasoUserRoleController.php @@ -31,7 +31,7 @@ public function browseByUser(Request $request) { try { $request->validate([ - 'user_id' => 'required|exists:users,id', + 'user_id' => 'required|exists:Uasoft\Badaso\Models\User,id', ]); $user_roles = UserRole::where('user_id', $request->user_id)->get(); @@ -49,16 +49,17 @@ public function browseAllRole(Request $request) { try { $request->validate([ - 'user_id' => 'required|exists:users,id', + 'user_id' => 'required|exists:Uasoft\Badaso\Models\User,id', ]); + $prefix = config('badaso.database.prefix'); $query = ' SELECT A.*, CASE WHEN B.user_id is not null then 1 else 0 END as selected - FROM roles A - LEFT JOIN user_roles B ON A.id = B.role_id AND B.user_id = :user_id + FROM '.$prefix.'roles A + LEFT JOIN '.$prefix.'user_roles B ON A.id = B.role_id AND B.user_id = :user_id '; $user_roles = DB::select($query, [ 'user_id' => $request->user_id, @@ -76,7 +77,7 @@ public function addOrEdit(Request $request) { try { $request->validate([ - 'user_id' => 'required|exists:users,id', + 'user_id' => 'required|exists:Uasoft\Badaso\Models\User,id', ]); $roles = $request->get('roles', []); diff --git a/src/Controllers/Controller.php b/src/Controllers/Controller.php index ba0bcc671..19a707e78 100644 --- a/src/Controllers/Controller.php +++ b/src/Controllers/Controller.php @@ -39,14 +39,15 @@ public function getDataType($slug) public function isAuthorize($method, $data_type) { + $prefix = config('badaso.database.prefix'); if ($user = auth()->user()) { $permissions = DB::SELECT(' SELECT * - FROM permissions p - JOIN role_permissions rp ON p.id = rp.permission_id - JOIN roles r ON rp.role_id = r.id - JOIN user_roles ur ON r.id = ur.role_id - JOIN users u ON ur.user_id = u.id + FROM '.$prefix.'permissions p + JOIN '.$prefix.'role_permissions rp ON p.id = rp.permission_id + JOIN '.$prefix.'roles r ON rp.role_id = r.id + JOIN '.$prefix.'user_roles ur ON r.id = ur.role_id + JOIN '.$prefix.'users u ON ur.user_id = u.id WHERE u.id = :user_id AND p.key = :permission ', [ diff --git a/src/Database/Schema/SchemaManager.php b/src/Database/Schema/SchemaManager.php index ee8552723..209c9c421 100644 --- a/src/Database/Schema/SchemaManager.php +++ b/src/Database/Schema/SchemaManager.php @@ -140,4 +140,9 @@ public static function getDoctrineColumn($table, $column) { return static::getDoctrineTable($table)->getColumn($column); } + + public static function getDoctrineForeignKeys($table) + { + return static::manager()->listTableForeignKeys($table); + } } diff --git a/src/Helpers/AuthenticatedUser.php b/src/Helpers/AuthenticatedUser.php index 8267c4703..8e93cd58a 100644 --- a/src/Helpers/AuthenticatedUser.php +++ b/src/Helpers/AuthenticatedUser.php @@ -21,18 +21,22 @@ public static function getUser() private static function getRoles($user_id) { - return UserRole::join('roles', 'roles.id', '=', 'user_roles.role_id') + $prefix = config('badaso.database.prefix'); + + return UserRole::join($prefix.'roles', $prefix.'roles.id', '=', $prefix.'user_roles.role_id') ->where('user_id', $user_id) - ->select('roles.*') + ->select($prefix.'roles.*') ->get(); } private static function getPermissions($user_id) { - return RolePermission::join('user_roles', 'role_permissions.role_id', '=', 'user_roles.role_id') - ->join('permissions', 'permissions.id', '=', 'role_permissions.permission_id') - ->where('user_roles.user_id', $user_id) - ->select('permissions.id', 'permissions.key') + $prefix = config('badaso.database.prefix'); + + return RolePermission::join($prefix.'user_roles', $prefix.'role_permissions.role_id', '=', $prefix.'user_roles.role_id') + ->join($prefix.'permissions', $prefix.'permissions.id', '=', $prefix.'role_permissions.permission_id') + ->where($prefix.'user_roles.user_id', $user_id) + ->select($prefix.'permissions.id', $prefix.'permissions.key') ->get(); } diff --git a/src/Helpers/MigrationParser.php b/src/Helpers/MigrationParser.php index 2817946ca..1c8de475a 100644 --- a/src/Helpers/MigrationParser.php +++ b/src/Helpers/MigrationParser.php @@ -146,6 +146,22 @@ class MigrationParser DB::statement('ALTER TABLE %s ALTER COLUMN %s DROP DEFAULT'); TXT; + const ADD_FOREIGN_KEY = <<<'TXT' + $table->foreign('%s')->references('%s')->on('%s') + TXT; + + const DROP_FOREIGN_KEY = <<<'TXT' + $table->dropForeign([%s]); + TXT; + + const ADD_FOREIGN_KEY_ON_DELETE = <<<'TXT' + ->onDelete('%s') + TXT; + + const ADD_FOREIGN_KEY_ON_UPDATE = <<<'TXT' + ->onUpdate('%s') + TXT; + public static function getMigrationSchemaUp($name, $rows, $prefix = null) { if ($prefix == 'drop') { @@ -158,6 +174,36 @@ public static function getMigrationSchemaUp($name, $rows, $prefix = null) return sprintf(self::MIGRATION_UP_WRAPPER, $name, implode(PHP_EOL.chr(9).chr(9).chr(9), self::getMigrationFields($name, $rows))); } + public static function getMigrationRelationshipSchemaUp($name, $relations) + { + return sprintf(self::ALTER_WRAPPER, $name, implode(PHP_EOL.chr(9).chr(9).chr(9), self::getMigrationRelationshipUp($name, $relations))); + } + + public static function getAlterMigrationRelationshipSchemaUp($name, $relations) + { + if (implode(PHP_EOL.chr(9).chr(9).chr(9), self::getAlterMigrationRelationshipUp($relations)) !== '') { + return sprintf(self::ALTER_WRAPPER, + $name['current_name'], + implode(PHP_EOL.chr(9).chr(9).chr(9), self::getAlterMigrationRelationshipUp($relations)) + ); + } + } + + public static function getMigrationRelationshipSchemaDown($name, $relations) + { + return sprintf(self::ALTER_WRAPPER, $name, self::getMigrationRelationshipDown($relations)); + } + + public static function getAlterMigrationRelationshipSchemaDown($name, $relations) + { + if (implode(PHP_EOL.chr(9).chr(9).chr(9), self::getAlterMigrationRelationshipDown($relations)) !== '') { + return sprintf(self::ALTER_WRAPPER, + $name['current_name'], + implode(PHP_EOL.chr(9).chr(9).chr(9), self::getAlterMigrationRelationshipDown($relations)) + ); + } + } + public static function getMigrationSchemaDown($name, $rows = [], $prefix = null, bool $timestamp = true) { if ($prefix == 'drop') { @@ -170,11 +216,13 @@ public static function getMigrationSchemaDown($name, $rows = [], $prefix = null, ); } - public static function getAlterMigrationSchemaUp($name, $rows, $prefix = null) + public static function getAlterMigrationSchemaUp($name, $rows, $prefix = null, $relations = []) { $stub = ''; + $dropped_fk_field = ''; + if ($prefix == 'rename') { - $stub .= sprintf( + $stub .= chr(9).chr(9).chr(9).sprintf( self::RENAME_TABLE_WRAPPER, $name['current_name'], $name['modified_name'], @@ -187,12 +235,23 @@ public static function getAlterMigrationSchemaUp($name, $rows, $prefix = null) $dropped_field = 0; $altered_field = 0; $added_field = 0; + $dropped_fk = 0; $fields = []; $modified = []; $alter = []; + $fk = []; $rows = self::formatRows($rows); + if (! empty($relations)) { + foreach ($relations['modified_relations'] as $key => $relation) { + if (array_key_exists('modify_type', $relation) && $relation['modify_type'] === 'DROP_FOREIGN_KEY') { + $dropped_fk++; + $fk[] = $relation; + } + } + } + foreach ($rows['current_fields'] as $key => $value) { if (! array_key_exists($key, $rows['modified_fields'])) { $dropped_field++; @@ -239,6 +298,14 @@ public static function getAlterMigrationSchemaUp($name, $rows, $prefix = null) } } + if ($dropped_fk > 0) { + $fk_fields = []; + foreach ($fk as $key => $value) { + $fk_fields[] = sprintf(self::DROP_FOREIGN_KEY, "'".$value['source_field']."'"); + } + $dropped_fk_field = sprintf(self::ALTER_WRAPPER, $name['current_name'], implode(PHP_EOL.chr(9).chr(9).chr(9), $fk_fields)); + } + if ($altered_field > 0) { $fields = self::getAlterMigrationUpFields($rows, $name); /** @@ -309,14 +376,15 @@ public static function getAlterMigrationSchemaUp($name, $rows, $prefix = null) } } - return $stub; + return ($dropped_fk_field ? $dropped_fk_field.PHP_EOL.PHP_EOL : null).$stub; } - public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix = null) + public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix = null, $relations = []) { $stub = ''; + $dropped_fk_field = ''; if ($prefix == 'rename') { - $stub .= sprintf( + $stub .= chr(9).chr(9).chr(9).sprintf( self::RENAME_TABLE_WRAPPER, $name['modified_name'], $name['current_name'], @@ -326,9 +394,20 @@ public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix $dropped_field = 0; $altered_field = 0; $added_field = 0; + $dropped_fk = 0; $fields = []; $modified = []; $alter = []; + $fk = []; + + if (! empty($relations)) { + foreach ($relations['modified_relations'] as $key => $relation) { + if (array_key_exists('modify_type', $relation) && $relation['modify_type'] === 'DROP_FOREIGN_KEY') { + $dropped_fk++; + $fk[] = $relation; + } + } + } $rows = self::formatRows($rows); @@ -378,6 +457,23 @@ public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix } } + if ($dropped_fk > 0) { + $fk_fields = []; + + foreach ($fk as $key => $value) { + $temp_field = sprintf(self::ADD_FOREIGN_KEY, $value['source_field'], $value['target_field'], $value['target_table']); + if (! empty($value['on_delete'])) { + $temp_field .= sprintf(self::ADD_FOREIGN_KEY_ON_DELETE, $value['on_delete']); + } + if (! empty($value['on_update'])) { + $temp_field .= sprintf(self::ADD_FOREIGN_KEY_ON_UPDATE, $value['on_update']); + } + $fk_fields[] = $temp_field.';'; + } + + $dropped_fk_field = sprintf(self::ALTER_WRAPPER, $name['current_name'], implode(PHP_EOL.chr(9).chr(9).chr(9), $fk_fields)); + } + if ($altered_field > 0) { $fields = self::getAlterMigrationDownFields($rows, $name); @@ -409,17 +505,21 @@ public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix if ($dropped_field > 0) { foreach ($rows['modified_fields'] as $key => $value) { if (in_array('DROP_FIELD', $value['modify_type'])) { - $modified[] = sprintf( - self::FIELD_STUB, - self::getMigrationTypeField($value['field_type']), - $value['field_name'], - self::getMigrationLengthField($value['field_length'], $value['field_type']), - $value['field_default'], - self::getMigrationNullField($value['field_null']), - self::getMigrationIndexField($value['field_index'], null, $value['field_name']), - self::getMigrationAttributeField($value['field_attribute'] ?? null), - self::getMigrationIncrementField($value['field_increment']) - ); + if (in_array($value['field_type'], ['timestamp']) && in_array($value['field_name'], ['deleted_at'])) { + $modified[] = sprintf(self::SOFT_DELETE); + } else { + $modified[] = sprintf( + self::FIELD_STUB, + self::getMigrationTypeField($value['field_type']), + $value['field_name'], + self::getMigrationLengthField($value['field_length'], $value['field_type']), + $value['field_default'], + self::getMigrationNullField($value['field_null']), + self::getMigrationIndexField($value['field_index'], null, $value['field_name']), + self::getMigrationAttributeField($value['field_attribute'] ?? null), + self::getMigrationIncrementField($value['field_increment']) + ); + } } } } @@ -441,7 +541,107 @@ public static function getAlterMigrationSchemaDown($name, $rows = null, $prefix } } - return $stub; + return $stub.($dropped_fk_field ? $dropped_fk_field.PHP_EOL.PHP_EOL : null); + } + + public static function getMigrationRelationshipUp($name, $relations) + { + $fields = []; + + foreach ($relations as $relation) { + $field = sprintf(self::ADD_FOREIGN_KEY, $relation['source_field'], $relation['target_field'], $relation['target_table']); + + if (! empty($relation['on_delete'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_DELETE, $relation['on_delete']); + } + + if (! empty($relation['on_update'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_UPDATE, $relation['on_update']); + } + + $fields[] = $field.';'; + } + + return $fields; + } + + public static function getAlterMigrationRelationshipUp($relations) + { + $fields = []; + + foreach ($relations['modified_relations'] as $relation) { + $type = $relation['modify_type'] ?? null; + if (! empty($type)) { + if ($type === 'ADD_FOREIGN_KEY') { + $field = sprintf(self::ADD_FOREIGN_KEY, $relation['source_field'], $relation['target_field'], $relation['target_table']); + + if (! empty($relation['on_delete'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_DELETE, $relation['on_delete']); + } + + if (! empty($relation['on_update'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_UPDATE, $relation['on_update']); + } + + $fields[] = $field.';'; + } + + if ($type === 'CHANGE_FOREIGN_KEY') { + $filteredRelation = "'".$relation['source_field']."'"; + $fields[] = sprintf(self::DROP_FOREIGN_KEY, $filteredRelation); + + $field = sprintf(self::ADD_FOREIGN_KEY, $relation['source_field'], $relation['target_field'], $relation['target_table']); + if (! empty($relation['on_delete'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_DELETE, $relation['on_delete']); + } + if (! empty($relation['on_update'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_UPDATE, $relation['on_update']); + } + $fields[] = $field.';'; + } + } + } + + return $fields; + } + + public static function getMigrationRelationshipDown($relations) + { + $filteredRelation = collect(array_values($relations))->pluck('source_field')->toArray(); + $relation = "'".implode("', '", $filteredRelation)."'"; + + return sprintf(self::DROP_FOREIGN_KEY, $relation); + } + + public static function getAlterMigrationRelationshipDown($relations) + { + $fields = []; + + foreach ($relations['modified_relations'] as $key => $relation) { + $type = $relation['modify_type'] ?? null; + if (! empty($type)) { + if ($type === 'ADD_FOREIGN_KEY') { + $filteredRelation = "'".$relation['source_field']."'"; + $fields[] = sprintf(self::DROP_FOREIGN_KEY, $filteredRelation); + } + + if ($type === 'CHANGE_FOREIGN_KEY') { + $filteredRelation = "'".$relation['source_field']."'"; + $fields[] = sprintf(self::DROP_FOREIGN_KEY, $filteredRelation); + + $field = sprintf(self::ADD_FOREIGN_KEY, $relation['source_field'], $relations['current_relations'][$key]['target_field'], $relations['current_relations'][$key]['target_table']); + if (! empty($relations['current_relations'][$key]['on_delete'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_DELETE, $relations['current_relations'][$key]['on_delete']); + } + if (! empty($relations['current_relations'][$key]['on_update'])) { + $field .= sprintf(self::ADD_FOREIGN_KEY_ON_UPDATE, $relations['current_relations'][$key]['on_update']); + } + $fields[] = $field.';'; + } + } + } + + return $fields; } public static function getMigrationFields($name, $rows) @@ -454,7 +654,7 @@ public static function getMigrationFields($name, $rows) } elseif (in_array($row['field_type'], ['timestamp']) && in_array($row['field_name'], ['deleted_at'])) { $fields[] = sprintf(self::SOFT_DELETE); } else { - if ($row['field_index'] !== null) { + if (! empty($row['field_index']) && $row['field_index'] !== 'foreign') { $index = '->'.self::getMigrationIndexField($row['field_index'], null, $row['field_name']); } else { $index = null; @@ -569,13 +769,21 @@ public static function getAlterMigrationUpFields(array $rows, $table = null) self::getMigrationIndexField($row['field_index'], $current_fields['field_index'], $row['field_name']), ); } elseif ($current_fields['field_index'] !== null && $row['field_index'] === null) { - if ($current_fields['field_index'] !== 'primary') { + if ($current_fields['field_index'] !== 'primary' && $current_fields['field_index'] !== 'foreign') { $stub[] = sprintf( self::DROP_INDEX, ucfirst($current_fields['field_index']), $row['field_name'] ); } + + if ($current_fields['field_index'] === 'foreign') { + $stub[] = sprintf( + self::DROP_INDEX, + 'Index', + $table['current_name'].'_'.$row['field_name'].'_foreign' + ); + } } } elseif (in_array('UPDATE_INDEX', $row['modify_type'])) { $stub[] = sprintf( @@ -695,7 +903,7 @@ public static function getAlterMigrationDownFields(array $rows, $table = null) if (! empty(array_intersect($row['modify_type'], ['UPDATE_INDEX', 'UPDATE_INCREMENT']))) { if ($current_fields['field_index'] !== null && $row['field_index'] === null) { - if ($current_fields['field_index'] !== 'primary') { + if ($current_fields['field_index'] !== 'primary' && $current_fields['field_index'] !== 'foreign') { $indexes[] = sprintf( self::CREATE_INDEX, self::getMigrationIndexField($row['field_index'], $current_fields['field_index'], $row['field_name']), @@ -820,7 +1028,7 @@ public static function getMigrationLengthField($field, $fieldType) public static function getMigrationDefaultField($fieldType, $field) { - if ($field !== null) { + if (! empty($field)) { if (in_array($fieldType, ['integer', 'float', 'double', 'decimal'])) { return sprintf(self::FIELD_DEFAULT_DECIMAL, $field); } else { @@ -848,10 +1056,12 @@ public static function getMigrationNullField($field, $oldField = null) public static function getMigrationIndexField($field, $current = null, $name) { - if ($field === null && $current !== null) { - return sprintf(self::FIELD_INDEX, $current, $name); - } elseif ($field !== null && $current === null) { - return sprintf(self::FIELD_INDEX, $field, $name); + if ($field !== 'foreign') { + if ($field === null && $current !== null) { + return sprintf(self::FIELD_INDEX, $current, $name); + } elseif ($field !== null && $current === null) { + return sprintf(self::FIELD_INDEX, $field, $name); + } } } diff --git a/src/Migrations/2020_11_12_000000_create_badaso_users_table.php b/src/Migrations/2020_11_12_000000_create_badaso_users_table.php new file mode 100644 index 000000000..e5c05f882 --- /dev/null +++ b/src/Migrations/2020_11_12_000000_create_badaso_users_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->text('additional_info')->nullable(); + $table->string('avatar')->nullable()->default('files/shares/default-user.png'); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists(config('badaso.database.prefix').'users'); + } +} diff --git a/src/Migrations/2020_11_12_100000_create_badaso_password_resets_table.php b/src/Migrations/2020_11_12_100000_create_badaso_password_resets_table.php new file mode 100644 index 000000000..3c9cda27b --- /dev/null +++ b/src/Migrations/2020_11_12_100000_create_badaso_password_resets_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists(config('badaso.database.prefix').'password_resets'); + } +} diff --git a/src/Migrations/2020_11_13_064800_create_data_type.php b/src/Migrations/2020_11_13_064800_create_data_type.php index 9594e52af..a4a2914d2 100644 --- a/src/Migrations/2020_11_13_064800_create_data_type.php +++ b/src/Migrations/2020_11_13_064800_create_data_type.php @@ -14,8 +14,8 @@ class CreateDataType extends Migration public function up() { try { - Schema::create('data_types', function (Blueprint $table) { - $table->increments('id'); + Schema::create(config('badaso.database.prefix').'data_types', function (Blueprint $table) { + $table->id(); $table->string('name')->unique(); $table->string('slug')->unique(); $table->string('display_name_singular'); @@ -38,9 +38,9 @@ public function up() }); // Create table for storing roles - Schema::create('data_rows', function (Blueprint $table) { - $table->increments('id'); - $table->integer('data_type_id')->unsigned(); + Schema::create(config('badaso.database.prefix').'data_rows', function (Blueprint $table) { + $table->id(); + $table->foreignId('data_type_id'); $table->string('field'); $table->string('type'); $table->string('display_name'); @@ -54,8 +54,7 @@ public function up() $table->text('relation')->nullable(); $table->integer('order')->default(1); - $table->foreign('data_type_id')->references('id')->on('data_types') - ->onUpdate('cascade')->onDelete('cascade'); + $table->foreign('data_type_id')->references('id')->on(config('badaso.database.prefix').'data_types')->onUpdate('cascade')->onDelete('cascade'); }); } catch (PDOException $ex) { $this->down(); @@ -71,7 +70,7 @@ public function up() */ public function down() { - Schema::dropIfExists('data_rows'); - Schema::dropIfExists('data_types'); + Schema::dropIfExists(config('badaso.database.prefix').'data_rows'); + Schema::dropIfExists(config('badaso.database.prefix').'data_types'); } } diff --git a/src/Migrations/2020_11_18_014827_create_configurations.php b/src/Migrations/2020_11_18_014827_create_configurations.php index 51b690da1..43fe5e471 100644 --- a/src/Migrations/2020_11_18_014827_create_configurations.php +++ b/src/Migrations/2020_11_18_014827_create_configurations.php @@ -14,8 +14,8 @@ class CreateConfigurations extends Migration public function up() { try { - Schema::create('configurations', function (Blueprint $table) { - $table->increments('id'); + Schema::create(config('badaso.database.prefix').'configurations', function (Blueprint $table) { + $table->id(); $table->string('key')->unique(); $table->string('display_name'); $table->text('value')->nullable(); @@ -40,6 +40,6 @@ public function up() */ public function down() { - Schema::dropIfExists('configurations'); + Schema::dropIfExists(config('badaso.database.prefix').'configurations'); } } diff --git a/src/Migrations/2020_11_18_014939_create_roles.php b/src/Migrations/2020_11_18_014939_create_roles.php index 73a89bf0e..f1afabdbb 100644 --- a/src/Migrations/2020_11_18_014939_create_roles.php +++ b/src/Migrations/2020_11_18_014939_create_roles.php @@ -14,8 +14,8 @@ class CreateRoles extends Migration public function up() { try { - Schema::create('roles', function (Blueprint $table) { - $table->increments('id'); + Schema::create(config('badaso.database.prefix').'roles', function (Blueprint $table) { + $table->id(); $table->string('name')->unique(); $table->string('display_name'); $table->string('description')->nullable(); @@ -35,6 +35,6 @@ public function up() */ public function down() { - Schema::dropIfExists('roles'); + Schema::dropIfExists(config('badaso.database.prefix').'roles'); } } diff --git a/src/Migrations/2020_11_18_014950_create_permissions.php b/src/Migrations/2020_11_18_014950_create_permissions.php index 098264556..03eaec8d7 100644 --- a/src/Migrations/2020_11_18_014950_create_permissions.php +++ b/src/Migrations/2020_11_18_014950_create_permissions.php @@ -14,8 +14,8 @@ class CreatePermissions extends Migration public function up() { try { - Schema::create('permissions', function (Blueprint $table) { - $table->increments('id'); + Schema::create(config('badaso.database.prefix').'permissions', function (Blueprint $table) { + $table->id(); $table->string('key')->index(); $table->string('description')->nullable(); $table->string('table_name')->nullable(); @@ -37,6 +37,6 @@ public function up() */ public function down() { - Schema::dropIfExists('permissions'); + Schema::dropIfExists(config('badaso.database.prefix').'permissions'); } } diff --git a/src/Migrations/2020_11_18_015020_create_menus.php b/src/Migrations/2020_11_18_015020_create_menus.php index a59c527d2..a9ac5e001 100644 --- a/src/Migrations/2020_11_18_015020_create_menus.php +++ b/src/Migrations/2020_11_18_015020_create_menus.php @@ -14,8 +14,8 @@ class CreateMenus extends Migration public function up() { try { - Schema::create('menus', function (Blueprint $table) { - $table->increments('id'); + Schema::create(config('badaso.database.prefix').'menus', function (Blueprint $table) { + $table->id(); $table->string('key')->unique(); $table->string('display_name'); $table->string('icon')->nullable(); @@ -35,6 +35,6 @@ public function up() */ public function down() { - Schema::dropIfExists('menus'); + Schema::dropIfExists(config('badaso.database.prefix').'menus'); } } diff --git a/src/Migrations/2020_11_18_015029_create_menu_items.php b/src/Migrations/2020_11_18_015029_create_menu_items.php index 762e1c403..8959b641f 100644 --- a/src/Migrations/2020_11_18_015029_create_menu_items.php +++ b/src/Migrations/2020_11_18_015029_create_menu_items.php @@ -14,9 +14,9 @@ class CreateMenuItems extends Migration public function up() { try { - Schema::create('menu_items', function (Blueprint $table) { - $table->increments('id'); - $table->unsignedInteger('menu_id')->nullable(); + Schema::create(config('badaso.database.prefix').'menu_items', function (Blueprint $table) { + $table->id(); + $table->foreignId('menu_id'); $table->string('title'); $table->string('url'); $table->string('target')->default('_self'); @@ -41,6 +41,6 @@ public function up() */ public function down() { - Schema::dropIfExists('menu_items'); + Schema::dropIfExists(config('badaso.database.prefix').'menu_items'); } } diff --git a/src/Migrations/2020_11_18_015341_add_badaso_user_field.php b/src/Migrations/2020_11_18_015341_add_badaso_user_field.php deleted file mode 100644 index d9bcc6cb0..000000000 --- a/src/Migrations/2020_11_18_015341_add_badaso_user_field.php +++ /dev/null @@ -1,50 +0,0 @@ -string('avatar')->nullable()->after('email')->default('files/shares/default-user.png'); - } - if (! Schema::hasColumn('users', 'additional_info')) { - $table->text('additional_info')->nullable()->after('email'); - } - }); - } catch (PDOException $ex) { - $this->down(); - - throw $ex; - } - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - if (Schema::hasColumn('users', 'avatar')) { - Schema::table('users', function ($table) { - $table->dropColumn('avatar'); - }); - } - if (Schema::hasColumn('users', 'additional_info')) { - Schema::table('users', function ($table) { - $table->dropColumn('additional_info'); - }); - } - } -} diff --git a/src/Migrations/2020_11_18_015852_create_user_roles.php b/src/Migrations/2020_11_18_015852_create_user_roles.php index 2363bca85..e8313d2fb 100644 --- a/src/Migrations/2020_11_18_015852_create_user_roles.php +++ b/src/Migrations/2020_11_18_015852_create_user_roles.php @@ -14,25 +14,24 @@ class CreateUserRoles extends Migration public function up() { try { - Schema::create('user_roles', function (Blueprint $table) { - $table->increments('id'); - // $table->unsignedInteger('user_id')->index(); - $table->unsignedBigInteger('user_id')->index(); - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); - $table->unsignedInteger('role_id')->index(); - $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); + Schema::create(config('badaso.database.prefix').'user_roles', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id'); + $table->foreignId('role_id'); + $table->foreign('user_id')->references('id')->on(config('badaso.database.prefix').'users')->onDelete('cascade'); + $table->foreign('role_id')->references('id')->on(config('badaso.database.prefix').'roles')->onDelete('cascade'); $table->timestamps(); }); } catch (PDOException $ex) { $this->down(); try { - Schema::create('user_roles', function (Blueprint $table) { - $table->increments('id'); - $table->unsignedInteger('user_id')->index(); - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); - $table->unsignedInteger('role_id')->index(); - $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); + Schema::create(config('badaso.database.prefix').'user_roles', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id'); + $table->foreignId('role_id'); + $table->foreign('user_id')->references('id')->on(config('badaso.database.prefix').'users')->onDelete('cascade'); + $table->foreign('role_id')->references('id')->on(config('badaso.database.prefix').'roles')->onDelete('cascade'); $table->timestamps(); }); } catch (PDOException $ex) { @@ -50,6 +49,6 @@ public function up() */ public function down() { - Schema::dropIfExists('user_roles'); + Schema::dropIfExists(config('badaso.database.prefix').'user_roles'); } } diff --git a/src/Migrations/2020_11_18_020028_create_role_permissions.php b/src/Migrations/2020_11_18_020028_create_role_permissions.php index d11bd0e9f..51fe436ca 100644 --- a/src/Migrations/2020_11_18_020028_create_role_permissions.php +++ b/src/Migrations/2020_11_18_020028_create_role_permissions.php @@ -14,12 +14,12 @@ class CreateRolePermissions extends Migration public function up() { try { - Schema::create('role_permissions', function (Blueprint $table) { - $table->increments('id'); - $table->unsignedInteger('role_id')->unsigned(); - $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); - $table->unsignedInteger('permission_id')->unsigned(); - $table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade'); + Schema::create(config('badaso.database.prefix').'role_permissions', function (Blueprint $table) { + $table->id(); + $table->foreignId('role_id'); + $table->foreignId('permission_id'); + $table->foreign('role_id')->references('id')->on(config('badaso.database.prefix').'roles')->onDelete('cascade'); + $table->foreign('permission_id')->references('id')->on(config('badaso.database.prefix').'permissions')->onDelete('cascade'); $table->timestamps(); }); } catch (PDOException $ex) { @@ -36,6 +36,6 @@ public function up() */ public function down() { - Schema::dropIfExists('role_permissions'); + Schema::dropIfExists(config('badaso.database.prefix').'role_permissions'); } } diff --git a/src/Migrations/2021_03_05_093223_create_activity_log_table.php b/src/Migrations/2021_03_05_093223_create_activity_log_table.php index 808d4f1b9..d3b1c118b 100644 --- a/src/Migrations/2021_03_05_093223_create_activity_log_table.php +++ b/src/Migrations/2021_03_05_093223_create_activity_log_table.php @@ -15,9 +15,9 @@ public function up() $table->increments('id'); $table->string('log_name')->nullable(); $table->text('description'); - $table->integer('subject_id')->nullable(); + $table->foreignId('subject_id')->nullable(); $table->string('subject_type')->nullable(); - $table->integer('causer_id')->nullable(); + $table->foreignId('causer_id')->nullable(); $table->string('causer_type')->nullable(); $table->text('properties')->nullable(); $table->timestamps(); diff --git a/src/Migrations/2021_03_09_064445_create_user_verifications.php b/src/Migrations/2021_03_09_064445_create_user_verifications.php index 6bc86e55a..08e660ad9 100644 --- a/src/Migrations/2021_03_09_064445_create_user_verifications.php +++ b/src/Migrations/2021_03_09_064445_create_user_verifications.php @@ -13,9 +13,9 @@ class CreateUserVerifications extends Migration */ public function up() { - Schema::create('user_verifications', function (Blueprint $table) { - $table->increments('id'); - $table->bigInteger('user_id')->nullable(); + Schema::create(config('badaso.database.prefix').'user_verifications', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id')->nullable(); $table->string('verification_token')->nullable()->unique(); $table->dateTime('expired_at')->nullable(); $table->integer('count_incorrect')->nullable(); @@ -30,6 +30,6 @@ public function up() */ public function down() { - Schema::dropIfExists('user_verifications'); + Schema::dropIfExists(config('badaso.database.prefix').'user_verifications'); } } diff --git a/src/Migrations/2021_03_12_073541_create_email_resets.php b/src/Migrations/2021_03_12_073541_create_email_resets.php index 80ed4a584..c664607e3 100644 --- a/src/Migrations/2021_03_12_073541_create_email_resets.php +++ b/src/Migrations/2021_03_12_073541_create_email_resets.php @@ -13,9 +13,9 @@ class CreateEmailResets extends Migration */ public function up() { - Schema::create('email_resets', function (Blueprint $table) { - $table->increments('id'); - $table->bigInteger('user_id')->nullable(); + Schema::create(config('badaso.database.prefix').'email_resets', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id')->nullable(); $table->string('email'); $table->string('verification_token')->nullable()->unique(); $table->dateTime('expired_at')->nullable(); @@ -31,6 +31,6 @@ public function up() */ public function down() { - Schema::dropIfExists('email_resets'); + Schema::dropIfExists(config('badaso.database.prefix').'email_resets'); } } diff --git a/src/Migrations/2021_04_26_014032_create_firebase_cloud_messages_table.php b/src/Migrations/2021_04_26_014032_create_firebase_cloud_messages_table.php index ecec82c6f..06491ddde 100644 --- a/src/Migrations/2021_04_26_014032_create_firebase_cloud_messages_table.php +++ b/src/Migrations/2021_04_26_014032_create_firebase_cloud_messages_table.php @@ -13,13 +13,13 @@ class CreateFirebaseCloudMessagesTable extends Migration */ public function up() { - Schema::create('firebase_cloud_messages', function (Blueprint $table) { - $table->string('id')->primary(); - $table->unsignedBigInteger('user_id'); + Schema::create(config('badaso.database.prefix').'firebase_cloud_messages', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id'); $table->string('token_get_message'); $table->timestamps(); - $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('user_id')->references('id')->on(config('badaso.database.prefix').'users')->onDelete('cascade'); }); } @@ -30,6 +30,6 @@ public function up() */ public function down() { - Schema::dropIfExists('firebase_cloud_messages'); + Schema::dropIfExists(config('badaso.database.prefix').'firebase_cloud_messages'); } } diff --git a/src/Migrations/2021_04_28_004319_create_f_c_m_messages_table.php b/src/Migrations/2021_04_28_004319_create_f_c_m_messages_table.php index a785a3f36..21326c86e 100644 --- a/src/Migrations/2021_04_28_004319_create_f_c_m_messages_table.php +++ b/src/Migrations/2021_04_28_004319_create_f_c_m_messages_table.php @@ -13,18 +13,18 @@ class CreateFCMMessagesTable extends Migration */ public function up() { - Schema::create('f_c_m_messages', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->unsignedBigInteger('receiver_user_id'); + Schema::create(config('badaso.database.prefix').'f_c_m_messages', function (Blueprint $table) { + $table->id(); + $table->foreignId('receiver_user_id'); $table->string('type'); $table->string('title'); $table->text('content'); $table->boolean('is_read')->default(0); - $table->unsignedBigInteger('sender_user_id'); + $table->foreignId('sender_user_id'); $table->timestamps(); - $table->foreign('receiver_user_id')->references('id')->on('users')->onDelete('cascade'); - $table->foreign('sender_user_id')->references('id')->on('users')->onDelete('cascade'); + $table->foreign('receiver_user_id')->references('id')->on(config('badaso.database.prefix').'users')->onDelete('cascade'); + $table->foreign('sender_user_id')->references('id')->on(config('badaso.database.prefix').'users')->onDelete('cascade'); }); } @@ -35,6 +35,6 @@ public function up() */ public function down() { - Schema::dropIfExists('f_c_m_messages'); + Schema::dropIfExists(config('badaso.database.prefix').'f_c_m_messages'); } } diff --git a/src/Models/Configuration.php b/src/Models/Configuration.php index 917e5da81..da27277dc 100644 --- a/src/Models/Configuration.php +++ b/src/Models/Configuration.php @@ -9,6 +9,18 @@ class Configuration extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'configurations'; + parent::__construct($attributes); + } + protected $fillable = [ 'key', 'display_name', diff --git a/src/Models/DataRow.php b/src/Models/DataRow.php index 4214de4fa..454d54575 100644 --- a/src/Models/DataRow.php +++ b/src/Models/DataRow.php @@ -9,7 +9,17 @@ class DataRow extends Model { use LogsActivity; - protected $table = 'data_rows'; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'data_rows'; + parent::__construct($attributes); + } public $timestamps = false; diff --git a/src/Models/DataType.php b/src/Models/DataType.php index 7d55ac00f..59dc7a129 100644 --- a/src/Models/DataType.php +++ b/src/Models/DataType.php @@ -7,7 +7,17 @@ class DataType extends Model { - protected $table = 'data_types'; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'data_types'; + parent::__construct($attributes); + } protected $fillable = [ 'name', diff --git a/src/Models/EmailReset.php b/src/Models/EmailReset.php index 7c95e46ed..938d41863 100644 --- a/src/Models/EmailReset.php +++ b/src/Models/EmailReset.php @@ -9,6 +9,18 @@ class EmailReset extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'email_resets'; + parent::__construct($attributes); + } + protected $fillable = [ 'user_id', 'email', diff --git a/src/Models/FCMMessage.php b/src/Models/FCMMessage.php index d223d1144..fecec53ab 100644 --- a/src/Models/FCMMessage.php +++ b/src/Models/FCMMessage.php @@ -6,6 +6,18 @@ class FCMMessage extends Model { + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'f_c_m_messages'; + parent::__construct($attributes); + } + protected $fillable = [ 'receiver_user_id', 'type', diff --git a/src/Models/FirebaseCloudMessages.php b/src/Models/FirebaseCloudMessages.php index 2f8f4b54b..4587cd640 100644 --- a/src/Models/FirebaseCloudMessages.php +++ b/src/Models/FirebaseCloudMessages.php @@ -10,6 +10,18 @@ class FirebaseCloudMessages extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'firebase_cloud_messages'; + parent::__construct($attributes); + } + protected $fillable = [ 'user_id', 'token_get_message', diff --git a/src/Models/FirebaseServices.php b/src/Models/FirebaseServices.php deleted file mode 100644 index a1d7eb8d7..000000000 --- a/src/Models/FirebaseServices.php +++ /dev/null @@ -1,26 +0,0 @@ -table = $prefix.'menus'; + parent::__construct($attributes); + } + + protected $guarded = []; protected static $logAttributes = true; protected static $logFillable = true; diff --git a/src/Models/MenuItem.php b/src/Models/MenuItem.php index 44c0cb56f..42b611ff8 100644 --- a/src/Models/MenuItem.php +++ b/src/Models/MenuItem.php @@ -9,7 +9,20 @@ class MenuItem extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'menu_items'; + parent::__construct($attributes); + } + protected $fillable = [ + 'id', 'menu_id', 'title', 'url', diff --git a/src/Models/PasswordReset.php b/src/Models/PasswordReset.php new file mode 100644 index 000000000..9c59951bd --- /dev/null +++ b/src/Models/PasswordReset.php @@ -0,0 +1,22 @@ +table = $prefix.'password_resets'; + parent::__construct($attributes); + } + + protected $guarded = []; +} diff --git a/src/Models/Permission.php b/src/Models/Permission.php index ba8b72bb2..84068774e 100644 --- a/src/Models/Permission.php +++ b/src/Models/Permission.php @@ -9,6 +9,18 @@ class Permission extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'permissions'; + parent::__construct($attributes); + } + protected $guarded = []; public static function generateFor($table_name, $is_maintenance = false) @@ -57,4 +69,24 @@ public function getDescriptionForEvent(string $eventName): string { return "This model has been {$eventName}"; } + + /** + * The roles that belong to the Permission. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany + */ + public function roles() + { + return $this->belongsToMany(Role::class, config('badaso.database.prefix').'role_permissions'); + } + + /** + * Get the role_permission that owns the Permission. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function role_permission() + { + return $this->belongsTo(RolePermission::class); + } } diff --git a/src/Models/Role.php b/src/Models/Role.php index 1bbbb9516..082833525 100644 --- a/src/Models/Role.php +++ b/src/Models/Role.php @@ -9,13 +9,25 @@ class Role extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'roles'; + parent::__construct($attributes); + } + protected $guarded = []; public function users() { $userModel = User::class; - return $this->belongsToMany($userModel, 'user_roles') + return $this->belongsToMany($userModel, config('badaso.database.prefix').'user_roles') ->select(app($userModel)->getTable().'.*') ->union($this->hasMany($userModel))->getQuery(); } @@ -27,7 +39,7 @@ public function user_roles() public function permissions() { - return $this->belongsToMany(Permission::class); + return $this->belongsToMany(Permission::class, config('badaso.database.prefix').'role_permissions'); } protected static $logAttributes = true; diff --git a/src/Models/RolePermission.php b/src/Models/RolePermission.php index ca143162b..598c4637f 100644 --- a/src/Models/RolePermission.php +++ b/src/Models/RolePermission.php @@ -9,14 +9,27 @@ class RolePermission extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'role_permissions'; + parent::__construct($attributes); + } + protected $fillable = [ + 'id', 'role_id', 'permission_id', ]; public function role() { - return $this->belongsTo(Role::class); + return $this->belongsTo(Role::class, config('badaso.database.prefix').'roles'); } public function permission() diff --git a/src/Models/User.php b/src/Models/User.php index 48e5f647b..304059314 100644 --- a/src/Models/User.php +++ b/src/Models/User.php @@ -13,6 +13,18 @@ class User extends Authenticatable implements JWTSubject use Notifiable; use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'users'; + parent::__construct($attributes); + } + /** * The attributes that are mass assignable. * diff --git a/src/Models/UserRole.php b/src/Models/UserRole.php index ec6a645ef..cfdad1d4e 100644 --- a/src/Models/UserRole.php +++ b/src/Models/UserRole.php @@ -9,6 +9,18 @@ class UserRole extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'user_roles'; + parent::__construct($attributes); + } + protected $fillable = [ 'user_id', 'role_id', diff --git a/src/Models/UserVerification.php b/src/Models/UserVerification.php index 1a122a2c9..b58ce55b2 100644 --- a/src/Models/UserVerification.php +++ b/src/Models/UserVerification.php @@ -9,6 +9,18 @@ class UserVerification extends Model { use LogsActivity; + protected $table = null; + + /** + * Constructor for setting the table name dynamically. + */ + public function __construct(array $attributes = []) + { + $prefix = config('badaso.database.prefix'); + $this->table = $prefix.'user_verifications'; + parent::__construct($attributes); + } + protected $fillable = [ 'user_id', 'verification_token', diff --git a/src/Seeder/Configurations/FixedMenuItemSeeder.php b/src/Seeder/Configurations/FixedMenuItemSeeder.php index 2067c9d66..4e6a9756a 100644 --- a/src/Seeder/Configurations/FixedMenuItemSeeder.php +++ b/src/Seeder/Configurations/FixedMenuItemSeeder.php @@ -3,6 +3,8 @@ namespace Database\Seeders\Badaso; use Illuminate\Database\Seeder; +use Uasoft\Badaso\Models\Menu; +use Uasoft\Badaso\Models\MenuItem; class FixedMenuItemSeeder extends Seeder { @@ -18,9 +20,11 @@ public function run() \DB::beginTransaction(); try { + $menu_id = Menu::where('key', 'configuration')->firstOrFail()->id; $menu_items = [ 0 => [ - 'menu_id' => '2', + 'id' => 1, + 'menu_id' => $menu_id, 'title' => 'Permission Management', 'url' => '/permission', 'target' => '_self', @@ -29,11 +33,10 @@ public function run() 'parent_id' => null, 'order' => 1, 'permissions' => 'browse_permissions', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 1 => [ - 'menu_id' => '2', + 'id' => 2, + 'menu_id' => $menu_id, 'title' => 'Role Management', 'url' => '/role', 'target' => '_self', @@ -42,11 +45,10 @@ public function run() 'parent_id' => null, 'order' => 2, 'permissions' => 'browse_roles', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 2 => [ - 'menu_id' => '2', + 'id' => 3, + 'menu_id' => $menu_id, 'title' => 'User Management', 'url' => '/user', 'target' => '_self', @@ -55,11 +57,10 @@ public function run() 'parent_id' => null, 'order' => 3, 'permissions' => 'browse_users', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 3 => [ - 'menu_id' => '2', + 'id' => 4, + 'menu_id' => $menu_id, 'title' => 'Menu Management', 'url' => '/menu', 'target' => '_self', @@ -68,11 +69,10 @@ public function run() 'parent_id' => null, 'order' => 4, 'permissions' => 'browse_menus', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 4 => [ - 'menu_id' => '2', + 'id' => 5, + 'menu_id' => $menu_id, 'title' => 'CRUD Management', 'url' => '/crud', 'target' => '_self', @@ -81,11 +81,10 @@ public function run() 'parent_id' => null, 'order' => 5, 'permissions' => 'browse_crud_data', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 5 => [ - 'menu_id' => '2', + 'id' => 6, + 'menu_id' => $menu_id, 'title' => 'Database Management', 'url' => '/database', 'target' => '_self', @@ -94,11 +93,10 @@ public function run() 'parent_id' => null, 'order' => 5, 'permissions' => 'browse_database', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 6 => [ - 'menu_id' => '2', + 'id' => 7, + 'menu_id' => $menu_id, 'title' => 'Site Management', 'url' => '/site', 'target' => '_self', @@ -107,11 +105,10 @@ public function run() 'parent_id' => null, 'order' => 6, 'permissions' => 'browse_configurations', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 7 => [ - 'menu_id' => '2', + 'id' => 8, + 'menu_id' => $menu_id, 'title' => 'Activity Log', 'url' => '/activity-log', 'target' => '_self', @@ -120,11 +117,10 @@ public function run() 'parent_id' => null, 'order' => 7, 'permissions' => 'browse_activitylogs', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 8 => [ - 'menu_id' => '2', + 'id' => 9, + 'menu_id' => $menu_id, 'title' => 'Log Viewer', 'url' => '/log-viewer', 'target' => '_self', @@ -133,11 +129,10 @@ public function run() 'parent_id' => null, 'order' => 8, 'permissions' => 'browse_logviewer', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 9 => [ - 'menu_id' => '2', + 'id' => 10, + 'menu_id' => $menu_id, 'title' => 'File Manager', 'url' => '/file-manager', 'target' => '_self', @@ -146,11 +141,10 @@ public function run() 'parent_id' => null, 'order' => 8, 'permissions' => 'browse_file_manager', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 10 => [ - 'menu_id' => '2', + 'id' => 11, + 'menu_id' => $menu_id, 'title' => 'API Documentation', 'url' => '/api-docs', 'target' => '_self', @@ -159,25 +153,21 @@ public function run() 'parent_id' => null, 'order' => 9, 'permissions' => 'browse_apidocs', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], ]; $new_menu_items = []; foreach ($menu_items as $key => $value) { - $menu_item = \DB::table('menu_items') - ->where('menu_id', $value['menu_id']) + $menu_item = MenuItem::where('menu_id', $value['menu_id']) ->where('url', $value['url']) ->first(); if (isset($menu_item)) { continue; } - $new_menu_items[] = $value; - } - \DB::table('menu_items')->insert($new_menu_items); + MenuItem::create($value); + } } catch (Exception $e) { throw new Exception('Exception occur '.$e); \DB::rollBack(); diff --git a/src/Seeder/Configurations/MenusSeeder.php b/src/Seeder/Configurations/MenusSeeder.php index 0f4a34d28..f43dd8d56 100644 --- a/src/Seeder/Configurations/MenusSeeder.php +++ b/src/Seeder/Configurations/MenusSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders\Badaso; use Illuminate\Database\Seeder; +use Uasoft\Badaso\Models\Menu; class MenusSeeder extends Seeder { @@ -23,31 +24,23 @@ public function run() 'id' => 1, 'key' => 'admin', 'display_name' => 'Admin Menu', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 1 => [ 'id' => 2, 'key' => 'configuration', 'display_name' => 'Configuration', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], ]; $new_menus = []; foreach ($menus as $key => $value) { - $menu = \DB::table('menus') - ->where('key', $value['key']) - ->first(); + $menu = Menu::where('key', $value['key'])->first(); if (isset($menu)) { continue; } - $new_menus[] = $value; + Menu::create($value); } - - \DB::table('menus')->insert($new_menus); } catch (Exception $e) { throw new Exception('Exception occur '.$e); \DB::rollBack(); diff --git a/src/Seeder/Configurations/RolesSeeder.php b/src/Seeder/Configurations/RolesSeeder.php index 8fdea30de..7603a4e78 100644 --- a/src/Seeder/Configurations/RolesSeeder.php +++ b/src/Seeder/Configurations/RolesSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders\Badaso; use Illuminate\Database\Seeder; +use Uasoft\Badaso\Models\Role; class RolesSeeder extends Seeder { @@ -23,31 +24,24 @@ public function run() 'id' => 1, 'name' => 'administrator', 'display_name' => 'Administrator', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 1 => [ 'id' => 2, 'name' => 'customer', 'display_name' => 'Customer', - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], ]; $new_roles = []; foreach ($roles as $key => $value) { - $role = \DB::table('roles') - ->where('id', $value['id']) - ->first(); + $role = Role::where('name', $value['name'])->first(); if (isset($role)) { continue; } - $new_roles[] = $value; - } - \DB::table('roles')->insert($new_roles); + Role::create($value); + } \DB::commit(); } catch (Exception $e) { diff --git a/src/Seeder/Configurations/SiteManagementSeeder.php b/src/Seeder/Configurations/SiteManagementSeeder.php index cdb2edfe3..cbf2bbc6d 100644 --- a/src/Seeder/Configurations/SiteManagementSeeder.php +++ b/src/Seeder/Configurations/SiteManagementSeeder.php @@ -3,6 +3,7 @@ namespace Database\Seeders\Badaso; use Illuminate\Database\Seeder; +use Uasoft\Badaso\Models\Configuration; class SiteManagementSeeder extends Seeder { @@ -20,6 +21,7 @@ public function run() try { $settings = [ 0 => [ + 'id' => 1, 'key' => 'adminPanelTitle', 'display_name' => 'Admin Panel Title', 'value' => 'Badaso', @@ -28,10 +30,9 @@ public function run() 'order' => 1, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 1 => [ + 'id' => 2, 'key' => 'adminPanelDescription', 'display_name' => 'Admin Panel Description', 'value' => 'Badaso, SPA CRUD Generator', @@ -40,10 +41,9 @@ public function run() 'order' => 2, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 2 => [ + 'id' => 3, 'key' => 'adminPanelLogo', 'display_name' => 'Admin Panel Logo', 'value' => 'files/shares/logo.webp', @@ -52,10 +52,9 @@ public function run() 'order' => 3, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 3 => [ + 'id' => 4, 'key' => 'adminPanelHeaderColor', 'display_name' => 'Admin Panel Header Color', 'value' => '#ffffff', @@ -64,10 +63,9 @@ public function run() 'order' => 4, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 4 => [ + 'id' => 5, 'key' => 'landingPageTitle', 'display_name' => 'Landing Page Title', 'value' => 'Badaso', @@ -76,10 +74,9 @@ public function run() 'order' => 1, 'group' => 'landingPage', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 5 => [ + 'id' => 6, 'key' => 'adminPanelHeaderFontColor', 'display_name' => 'Admin Panel Header Font Color', 'value' => '#06bbd3', @@ -88,10 +85,9 @@ public function run() 'order' => 5, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 6 => [ + 'id' => 7, 'key' => 'adminPanelVerifyEmail', 'display_name' => 'Should verify email after register', 'value' => '1', @@ -100,10 +96,9 @@ public function run() 'order' => 6, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 7 => [ + 'id' => 8, 'key' => 'adminPanelLogoConfig', 'display_name' => 'Admin Panel Logo Config', 'value' => 'logo_only', @@ -112,10 +107,9 @@ public function run() 'order' => 1, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-03-16 05:36:00', - 'updated_at' => '2021-03-16 05:36:00', ], 8 => [ + 'id' => 9, 'key' => 'favicon', 'display_name' => 'Favicon', 'value' => 'files/shares/favicon.png', @@ -124,10 +118,9 @@ public function run() 'order' => 7, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 9 => [ + 'id' => 10, 'key' => 'maintenance', 'display_name' => 'Maintenance for all pages.', 'value' => '0', @@ -136,10 +129,9 @@ public function run() 'order' => 8, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], 10 => [ + 'id' => 11, 'key' => 'authBackgroundImage', 'display_name' => 'Background image for login page.', 'value' => 'files/shares/auth-bg.jpg', @@ -148,17 +140,14 @@ public function run() 'order' => 9, 'group' => 'adminPanel', 'can_delete' => 0, - 'created_at' => '2021-01-01 15:26:06', - 'updated_at' => '2021-01-01 15:26:06', ], ]; foreach ($settings as $key => $value) { - \DB::table('configurations')->where('key', $value['key'])->delete(); + Configuration::where('key', $value['key'])->delete(); + Configuration::create($value); } - \DB::table('configurations')->insert($settings); - \DB::commit(); } catch (Exception $e) { throw new Exception('Exception occur '.$e); diff --git a/src/resources/js/assets/scss/layout/_custom.scss b/src/resources/js/assets/scss/layout/_custom.scss index a5c2abb7b..8885690b0 100644 --- a/src/resources/js/assets/scss/layout/_custom.scss +++ b/src/resources/js/assets/scss/layout/_custom.scss @@ -220,4 +220,8 @@ a { .vs-avatar--con-img img { object-fit: contain; height: 100%; +} + +.vs-select--options { + z-index: 99999 !important; } \ No newline at end of file diff --git a/src/resources/js/assets/scss/module/_alert.scss b/src/resources/js/assets/scss/module/_alert.scss index 2d3aaf8c4..79c6b5148 100644 --- a/src/resources/js/assets/scss/module/_alert.scss +++ b/src/resources/js/assets/scss/module/_alert.scss @@ -1,7 +1,7 @@ .badaso-alert { &__body { background-color: #f3f5f7; - border-color: var(--danger); + border-color: $danger; border-left-width: .2rem; border-left-style: solid; margin: -15px -15px 0 -15px; @@ -10,6 +10,7 @@ &__title { font-weight: bold; margin-bottom: -.4rem; + color: $danger; } &__description, &__title { diff --git a/src/resources/js/assets/scss/module/_unauthorize.scss b/src/resources/js/assets/scss/module/_unauthorize.scss index a3e3fdc5c..24a842454 100644 --- a/src/resources/js/assets/scss/module/_unauthorize.scss +++ b/src/resources/js/assets/scss/module/_unauthorize.scss @@ -9,5 +9,11 @@ &__message { text-align: center; + margin: 8px 0; + } + + &__title { + text-align: center; + margin: 8px 0; } } \ No newline at end of file diff --git a/src/resources/js/assets/scss/module/index.scss b/src/resources/js/assets/scss/module/index.scss index 3e3205477..c3de0ddd5 100644 --- a/src/resources/js/assets/scss/module/index.scss +++ b/src/resources/js/assets/scss/module/index.scss @@ -1,3 +1,4 @@ +@import "action-card"; @import "alert"; @import "auth-card-header"; @import "breadcrumb"; @@ -36,6 +37,7 @@ @import "text"; @import "textarea"; @import "time"; +@import "unauthorize"; @import "upload-file"; @import "upload-file-multiple"; @import "upload-image"; diff --git a/src/resources/js/assets/scss/page/_database-management.scss b/src/resources/js/assets/scss/page/_database-management.scss index df1bed694..3243e36c4 100644 --- a/src/resources/js/assets/scss/page/_database-management.scss +++ b/src/resources/js/assets/scss/page/_database-management.scss @@ -27,4 +27,24 @@ &__popup-sync { float: right; } + + &__button-group { + display: flex; + + & > button { + margin: 2px; + } + } + + &__relationship-dialog { + row-gap: 8px; + } + + &__relationship-prompt { + z-index: 29999; + + & .vs-dialog-accept-button { + margin-right: 8px; + } + } } \ No newline at end of file diff --git a/src/resources/js/assets/scss/page/_home.scss b/src/resources/js/assets/scss/page/_home.scss new file mode 100644 index 000000000..baf5bb7ea --- /dev/null +++ b/src/resources/js/assets/scss/page/_home.scss @@ -0,0 +1,23 @@ +.widget { + &__content { + position: relative; + } + &__icon { + position: absolute; + top: 50%; + right: 0; + transform: translate(0, -50%); + font-size: 40px; + z-index: 0; + color: #e0e0e0; + cursor: default; + user-select: none; + } + &__progress-bar { + z-index: 10; + position: relative; + } + &__icon-container { + position: relative; + } +} \ No newline at end of file diff --git a/src/resources/js/assets/scss/page/index.scss b/src/resources/js/assets/scss/page/index.scss index a29463136..19e15529b 100644 --- a/src/resources/js/assets/scss/page/index.scss +++ b/src/resources/js/assets/scss/page/index.scss @@ -15,3 +15,4 @@ @import 'menu-management'; @import 'site-management'; @import 'profile'; +@import 'home'; diff --git a/src/resources/js/components/BadasoUnauthorize.vue b/src/resources/js/components/BadasoUnauthorize.vue index 9dcd33df2..a7b9e0380 100644 --- a/src/resources/js/components/BadasoUnauthorize.vue +++ b/src/resources/js/components/BadasoUnauthorize.vue @@ -6,7 +6,7 @@ > -

+

{{ $t("authorizationIssue.subtitle") }}

diff --git a/src/resources/js/lang/modules/en.js b/src/resources/js/lang/modules/en.js index b2534e6de..9fc58870f 100644 --- a/src/resources/js/lang/modules/en.js +++ b/src/resources/js/lang/modules/en.js @@ -985,7 +985,7 @@ export default { warning: { title: "IMPORTANT", content: - 'Only the following column types can be "changed": Big Integer, BLOB, Boolean, Date, Datetime, Decimal, Float, Integer, JSON, Long Text, Medium Text, Set, Small Integer, Varchar, Text and Time.', + 'Only the following column types can be "changed": Big Integer, BLOB, Boolean, Date, Datetime, Decimal, Float, Integer, JSON, Long Text, Medium Text, Set, Small Integer, Varchar, Text and Time. Also, every field that you change, it\'ll be recorded when you submit the alter table. If you make some mistakes, you can refresh this page to reset your changes.', crud: "Make sure the table has not been generated with CRUD Management if you want to edit or drop it.", notAllowed: "You're not allowed to edit.", diff --git a/src/resources/js/pages/database-management/add.vue b/src/resources/js/pages/database-management/add.vue index df5bf53a7..0dc65b380 100644 --- a/src/resources/js/pages/database-management/add.vue +++ b/src/resources/js/pages/database-management/add.vue @@ -95,6 +95,7 @@ required :disabled="tr.undeletable" v-model="tr.fieldName" + @input="renameForeignkey(tr)" /> @@ -149,6 +150,7 @@ class="database-management__field-index" v-model="tr.fieldIndex" :disabled="tr.undeletable" + @change="setFieldIndex(tr)" > - - - +
+ + + + + + +
@@ -229,6 +241,42 @@ + + + +

Source Table

+
+ + + + +

Target Table

+
+ + + + + + + + + + + +

Type

+
+ + + + + + + + + + +
+
- + @@ -317,12 +365,30 @@ export default { databaseData: { table: "", rows: [], + relations: {} }, fieldTypeList: [], + relationDialog: false, + tables: [], + fields: [], + selectedField: "" }), validations() { return { databaseData: { + relations: { + $each: { + sourceField: { + required + }, + targetTable: { + required + }, + targetField: { + required + }, + } + }, table: { required, maxLength: maxLength(64), @@ -356,12 +422,98 @@ export default { return this.$databaseHelper.getMigrationIndexList(); }, }, + relationType() { + return this.$databaseHelper.getForeignConstraint(); + } }, mounted() { this.getDbmsFieldType(); this.insertIdToRows(); }, methods: { + renameForeignkey(item) { + if (this.databaseData.relations[item.id]) { + let newVal = item.fieldName + let oldVal = this.databaseData.relations[item.id].sourceField || null + if (newVal !== oldVal) { + this.databaseData.relations[item.id].sourceField = newVal + } + } + }, + setFieldIndex(item) { + if (item.fieldIndex === 'foreign') { + this.$set(this.databaseData.relations, item.id, { + sourceField: item.fieldName, + targetTable: "", + targetField: "", + onDelete: null, + onUpdate: null, + }) + } else { + this.$delete(this.databaseData.relations, item.id) + } + }, + setRelation() { + this.$v.databaseData.relations.$touch(); + if (!this.$v.databaseData.relations.$invalid) { + this.relationDialog = false + } + }, + fetchTableFields() { + this.$openLoader(); + this.$api.badasoTable + .read({ + table: this.databaseData.relations[this.selectedField].targetTable, + }) + .then((response) => { + this.$closeLoader(); + this.fields = response.data.tableFields; + }) + .catch((error) => { + this.$closeLoader(); + this.$vs.notify({ + title: this.$t("alert.danger"), + text: error.message, + color: "danger", + }); + }); + }, + openRelationDialog(item) { + this.selectedField = item.id + this.relationDialog = true + this.getTableList() + }, + cancelRelationDialog() { + this.$v.databaseData.relations.$touch(); + if (this.$v.databaseData.relations.$invalid) { + this.relationDialog = false + this.databaseData.relations[this.selectedField].targetTable = "" + this.databaseData.relations[this.selectedField].targetField = "" + this.databaseData.relations[this.selectedField].onDelete = "" + this.databaseData.relations[this.selectedField].onUpdate = "" + } + }, + getTableList() { + this.$openLoader(); + this.$api.badasoCrud + .browse() + .then((response) => { + this.$closeLoader(); + this.tables = response.data.tablesWithCrudData.map(table => { + return { + value: table.tableName + } + }); + }) + .catch((error) => { + this.$closeLoader(); + this.$vs.notify({ + title: this.$t("alert.danger"), + text: error.message, + color: "danger", + }); + }); + }, getDbmsFieldType() { this.$openLoader(); this.$api.badasoDatabase @@ -431,6 +583,7 @@ export default { addField() { let index = this.databaseData.rows.map(row => row.undeletable).indexOf(true) this.databaseData.rows.splice(index, 0, { + id: this.$helper.uuid(), fieldName: "", fieldType: "", fieldLength: null, @@ -456,46 +609,6 @@ export default { return found; }, - // addTimestamps() { - // if (this.findFieldOnRows("created_at")) { - // this.$vs.notify({ - // title: this.$t("alert.danger"), - // text: this.$t("database.warning.exists", { 0: "created_at" }), - // color: "danger", - // }); - // } else { - // this.databaseData.rows.push({ - // fieldName: "created_at", - // fieldType: "timestamp", - // fieldLength: null, - // fieldNull: true, - // fieldAttribute: false, - // fieldIncrement: false, - // fieldIndex: null, - // fieldDefault: null, - // }); - // } - - // if (this.findFieldOnRows("updated_at")) { - // this.$vs.notify({ - // title: this.$t("alert.danger"), - // text: this.$t("database.warning.exists", { 0: "updated_at" }), - // color: "danger", - // }); - // } else { - // this.databaseData.rows.push({ - // fieldName: "updated_at", - // fieldType: "timestamp", - // fieldLength: null, - // fieldNull: true, - // fieldAttribute: false, - // fieldIncrement: false, - // fieldIndex: null, - // fieldDefault: null, - // }); - // } - // }, - addSoftDeletes() { if (this.findFieldOnRows("deleted_at")) { this.$vs.notify({ @@ -517,13 +630,16 @@ export default { } }, - dropField(index) { + dropField(index, item) { this.$vs.dialog({ type: "confirm", color: "danger", title: this.$t("action.delete.title"), text: this.$t("action.delete.text"), - accept: () => this.databaseData.rows.splice(index, 1), + accept: () => { + this.databaseData.rows.splice(index, 1); + this.$delete(this.databaseData.relations, item.fieldName) + }, acceptText: this.$t("action.delete.accept"), cancelText: this.$t("action.delete.cancel"), }); @@ -531,6 +647,7 @@ export default { insertIdToRows() { this.databaseData.rows.push({ + id: "id", fieldName: "id", fieldType: "bigint", fieldLength: null, diff --git a/src/resources/js/pages/database-management/edit.vue b/src/resources/js/pages/database-management/edit.vue index 4ef6de226..1ae22a183 100644 --- a/src/resources/js/pages/database-management/edit.vue +++ b/src/resources/js/pages/database-management/edit.vue @@ -91,7 +91,7 @@ required :value="tr.fieldName" class="inputx" - @change="alterFieldProperty(tr, $event, 'RENAME', 'fieldName', indextr)" + @change="alterFieldProperty(tr, $event, 'RENAME', 'fieldName', indextr); renameForeignkey(tr)" :disabled="tr.undeletable" /> @@ -173,14 +173,24 @@ - - - +
+ + + + + + +
@@ -264,6 +274,42 @@ + + + +

Source Table

+
+ + + + +

Target Table

+
+ + + + + + + + + + + +

Type

+
+ + + + + + + + + + +
+
- + @@ -331,6 +377,8 @@ import { helpers, } from "vuelidate/lib/validators"; +import _ from 'lodash'; + const alphaNumAndUnderscoreValidator = helpers.regex( "alphaNumAndDot", /^[a-zA-Z\d_]*$/i @@ -369,9 +417,17 @@ export default { currentFields: [], modifiedFields: [], }, + relations: { + currentRelations: {}, + modifiedRelations: {} + } }, isCanEdit: false, fieldTypeList: [], + relationDialog: false, + tables: [], + fields: [], + selectedField: "" }), validations() { return { @@ -416,6 +472,34 @@ export default { required } }, + relations: { + currentRelations: { + $each: { + sourceField: { + required + }, + targetTable: { + required + }, + targetField: { + required + }, + } + }, + modifiedRelations: { + $each: { + sourceField: { + required + }, + targetTable: { + required + }, + targetField: { + required + }, + } + } + } }, }; }, @@ -425,6 +509,9 @@ export default { return this.$databaseHelper.getMigrationIndexList(); }, }, + relationType() { + return this.$databaseHelper.getForeignConstraint(); + } }, mounted() { this.getInfoTable(); @@ -432,6 +519,85 @@ export default { this.getIsCanEdit(); }, methods: { + renameForeignkey(item) { + if (this.databaseData.relations.modifiedRelations[item.id]) { + let newVal = item.fieldName + let oldVal = this.databaseData.relations.modifiedRelations[item.id].sourceField || null + if (newVal !== oldVal) { + this.databaseData.relations.modifiedRelations[item.id].sourceField = newVal + } + } + }, + setRelation() { + let modified = Object.values(this.databaseData.relations.modifiedRelations[this.selectedField]); + let current = Object.values(this.databaseData.relations.currentRelations[this.selectedField]); + this.$v.databaseData.relations.$touch(); + if (!this.$v.databaseData.relations.$invalid) { + this.relationDialog = false + if (modified.length !== current.length) { + this.$set(this.databaseData.relations.modifiedRelations[this.selectedField], 'modifyType', 'ADD_FOREIGN_KEY') + } else { + this.$set(this.databaseData.relations.modifiedRelations[this.selectedField], 'modifyType', 'CHANGE_FOREIGN_KEY') + } + } + }, + fetchTableFields() { + this.$openLoader(); + this.$api.badasoTable + .read({ + table: this.databaseData.relations.modifiedRelations[this.selectedField].targetTable, + }) + .then((response) => { + this.$closeLoader(); + this.fields = response.data.tableFields; + }) + .catch((error) => { + this.$closeLoader(); + this.$vs.notify({ + title: this.$t("alert.danger"), + text: error.message, + color: "danger", + }); + }); + }, + openRelationDialog(item) { + this.selectedField = item.id + this.relationDialog = true + this.getTableList() + + if (this.databaseData.relations.modifiedRelations[this.selectedField].targetTable) { + this.fetchTableFields() + } + }, + cancelRelationDialog() { + this.relationDialog = false + if (this.databaseData.relations.currentRelations.hasOwnProperty(this.selectedField)) { + this.databaseData.relations.modifiedRelations[this.selectedField] = { + ...this.databaseData.relations.currentRelations[this.selectedField] + } + } + }, + getTableList() { + this.$openLoader(); + this.$api.badasoCrud + .browse() + .then((response) => { + this.$closeLoader(); + this.tables = response.data.tablesWithCrudData.map(table => { + return { + value: table.tableName + } + }); + }) + .catch((error) => { + this.$closeLoader(); + this.$vs.notify({ + title: this.$t("alert.danger"), + text: error.message, + color: "danger", + }); + }); + }, getDbmsFieldType() { this.$api.badasoDatabase .getType() @@ -486,6 +652,7 @@ export default { }) .then((response) => { let data = response.data.columns; + let dataFK = response.data.columnsFK; for (const [key, column] of Object.entries(data)) { let id = this.$helper.uuid(); this.databaseData.fields.modifiedFields.push({ @@ -496,12 +663,7 @@ export default { fieldNull: column.notnull ? false : true, fieldAttribute: column.unsigned, fieldIncrement: column.autoincrement, - fieldIndex: - Object.keys(column.indexes).length > 0 - ? Object.values(column.indexes)[0] - .type.toString() - .toLowerCase() - : null, + fieldIndex: this.getFieldIndexes(column.indexes), fieldDefault: column.default, modifyType: [], undeletable: column.name === 'created_at' || column.name === 'updated_at' ? true : false @@ -515,18 +677,20 @@ export default { fieldNull: column.notnull ? false : true, fieldAttribute: column.unsigned, fieldIncrement: column.autoincrement, - fieldIndex: - Object.keys(column.indexes).length > 0 - ? Object.values(column.indexes)[0] - .type.toString() - .toLowerCase() - : null, + fieldIndex: this.getFieldIndexes(column.indexes), fieldDefault: column.default }); + + if (dataFK.hasOwnProperty(key)) { + this.$set(this.databaseData.relations.currentRelations, id, JSON.parse(JSON.stringify(dataFK[key]))) + this.$set(this.databaseData.relations.modifiedRelations, id, JSON.parse(JSON.stringify(dataFK[key]))) + } } this.databaseData.table.currentName = this.$route.params.tableName; this.databaseData.table.modifiedName = this.$route.params.tableName; + // this.databaseData.relations.currentRelations = JSON.parse(JSON.stringify(response.data.columnsFK)) + // this.databaseData.relations.modifiedRelations = JSON.parse(JSON.stringify(response.data.columnsFK)) this.$closeLoader(); }) .catch((error) => { @@ -539,6 +703,16 @@ export default { }); }, + getFieldIndexes(indexes) { + if (!_.isEmpty(indexes)) { + if (Object.values(indexes)[0].name.includes('foreign')) { + return 'foreign' + } + return Object.values(indexes)[0].type.toString().toLowerCase() + } + return null + }, + submitForm() { this.$v.databaseData.$touch(); if (!this.$v.databaseData.$invalid) { @@ -621,53 +795,30 @@ export default { return found; }, - // addTimestamps() { - // if (this.findFieldOnRows("created_at")) { - // this.$vs.notify({ - // title: this.$t("alert.danger"), - // text: this.$t("database.warning.exists", { 0: "created_at" }), - // color: "danger", - // }); - // } else { - // this.databaseData.fields.modifiedFields.push({ - // id: this.$helper.uuid(), - // fieldName: "created_at", - // fieldType: "timestamp", - // fieldLength: null, - // fieldNull: true, - // fieldAttribute: false, - // fieldIncrement: false, - // fieldIndex: null, - // fieldDefault: null, - // modifyType: [ - // 'CREATE' - // ] - // }); - // } - - // if (this.findFieldOnRows("updated_at")) { - // this.$vs.notify({ - // title: this.$t("alert.danger"), - // text: this.$t("database.warning.exists", { 0: "updated_at" }), - // color: "danger", - // }); - // } else { - // this.databaseData.fields.modifiedFields.push({ - // id: this.$helper.uuid(), - // fieldName: "updated_at", - // fieldType: "timestamp", - // fieldLength: null, - // fieldNull: true, - // fieldAttribute: false, - // fieldIncrement: false, - // fieldIndex: null, - // fieldDefault: null, - // modifyType: [ - // 'CREATE' - // ] - // }); - // } - // }, + addSoftDeletes() { + if (this.findFieldOnRows("deleted_at")) { + this.$vs.notify({ + title: this.$t("alert.danger"), + text: this.$t("database.warning.exists", { 0: "deleted_at" }), + color: "danger", + }); + } else { + this.databaseData.fields.modifiedFields.push({ + id: this.$helper.uuid(), + fieldName: "deleted_at", + fieldType: "timestamp", + fieldLength: null, + fieldNull: true, + fieldAttribute: false, + fieldIncrement: false, + fieldIndex: null, + fieldDefault: "", + modifyType: [ + 'CREATE' + ] + }); + } + }, dropField(item, index) { this.$vs.dialog({ @@ -683,11 +834,50 @@ export default { saveDrop(item, index) { this.databaseData.fields.modifiedFields.splice(index, 1) + if (item.fieldIndex === 'foreign') { + this.databaseData.relations.modifiedRelations[item.id].modifyType = 'DROP_FOREIGN_KEY' + + if (this.databaseData.relations.modifiedRelations[item.id].hasOwnProperty('new')) { + this.$delete(this.databaseData.relations.modifiedRelations, item.id) + } + } }, alterFieldProperty(item, event, eventType, field, indexRow) { let oldValue = item[field] let newValue = null + let modifiedRelation = this.databaseData.relations.modifiedRelations[item.id] || null + + if (field === 'fieldIndex') { + if (modifiedRelation === null) { + if (event === 'foreign') { + this.$set(this.databaseData.relations.modifiedRelations, item.id, { + modifyType: "ADD_FOREIGN_KEY", + sourceField: item.fieldName, + targetTable: "", + targetField: "", + onDelete: null, + onUpdate: null, + new: true + }) + eventType = null + } + } else { + if (this.databaseData.relations.modifiedRelations[item.id].hasOwnProperty('new')) { + if (newValue !== 'foreign' && oldValue === 'foreign') { + this.$delete(this.databaseData.relations.modifiedRelations, item.id) + } + } else { + if (newValue === 'foreign' && oldValue === null) { + this.$delete(this.databaseData.relations.modifiedRelations[item.id], 'modifyType') + } else if (newValue === null && oldValue === null) { + this.$delete(this.databaseData.relations.modifiedRelations[item.id], 'modifyType') + } else { + this.$set(this.databaseData.relations.modifiedRelations[item.id], 'modifyType', 'DROP_FOREIGN_KEY') + } + } + } + } if (field === 'fieldType' || field === 'fieldIndex') { newValue = event @@ -706,7 +896,7 @@ export default { isNew = false } - if (isNew) { + if (isNew && eventType) { item.modifyType.push(eventType); } @@ -714,7 +904,7 @@ export default { if (item.id === value.id) { if (newValue == value[field]) { let itemIndex = item.modifyType.indexOf(eventType); - + if (itemIndex > -1) { item.modifyType.splice(itemIndex, 1); } diff --git a/src/resources/js/pages/home.vue b/src/resources/js/pages/home.vue index 0c21d2d63..61cba9828 100644 --- a/src/resources/js/pages/home.vue +++ b/src/resources/js/pages/home.vue @@ -7,9 +7,11 @@ vs-xs="12" > - -

{{ data.value }}

- {{ data.label }} +
+ +

{{ data.value }}

+ {{ data.label }} +
primary
@@ -74,28 +76,3 @@ export default { }, }; - - \ No newline at end of file diff --git a/src/resources/js/pages/user-management/add.vue b/src/resources/js/pages/user-management/add.vue index 06948149b..fe9abe2c3 100644 --- a/src/resources/js/pages/user-management/add.vue +++ b/src/resources/js/pages/user-management/add.vue @@ -81,7 +81,7 @@ export default { user: { email: "", name: "", - avatar: {}, + avatar: "", password: "", emailVerified: false, additionalInfo: "", @@ -100,7 +100,7 @@ export default { .add({ email: this.user.email, name: this.user.name, - avatar: this.user.avatar.base64, + avatar: this.user.avatar, password: this.user.password, emailVerified: this.user.emailVerified, additionalInfo: this.user.additionalInfo, diff --git a/src/resources/js/pages/user-management/edit.vue b/src/resources/js/pages/user-management/edit.vue index 543d7b1df..683768e49 100644 --- a/src/resources/js/pages/user-management/edit.vue +++ b/src/resources/js/pages/user-management/edit.vue @@ -81,7 +81,7 @@ export default { user: { email: "", name: "", - avatar: {}, + avatar: "", password: "", emailVerified: false, additionalInfo: "", diff --git a/src/resources/js/utils/database-helper.js b/src/resources/js/utils/database-helper.js index b27a33ce7..0daf98522 100644 --- a/src/resources/js/utils/database-helper.js +++ b/src/resources/js/utils/database-helper.js @@ -16,6 +16,31 @@ export default { value: "primary", default: false, }, + { + label: "Foreign", + value: "foreign", + default: false, + } ]; }, + getForeignConstraint() { + return [ + { + label: "CASCADE", + value: "cascade" + }, + { + label: "SET NULL", + value: "set null" + }, + { + label: "NO ACTION", + value: "no action" + }, + { + label: "RESTRICT", + value: "restrict" + }, + ] + } };