From 587a79613e6cc42c947259ee5b63a7c4e66deae4 Mon Sep 17 00:00:00 2001 From: Dillon-Brown Date: Mon, 30 Dec 2019 11:36:29 +0000 Subject: [PATCH] Add API Platform Framework with Symfony/Flex This implements the basic structure that will be used for the API and core application. --- .env.dist | 38 + .env.test.dist | 4 + .gitignore | 11 + .htaccess | 66 + bin/console | 128 +- composer.json | 49 +- composer.lock | 5790 ++++++++++++----- config/bootstrap.php | 24 + config/bundles.php | 12 + config/packages/api_platform.yaml | 39 + config/packages/cache.yaml | 19 + config/packages/dev/monolog.yaml | 19 + config/packages/doctrine.yaml | 18 + config/packages/framework.yaml | 16 + config/packages/prod/doctrine.yaml | 20 + config/packages/prod/monolog.yaml | 23 + config/packages/prod/routing.yaml | 3 + config/packages/routing.yaml | 3 + config/packages/security.yaml | 22 + .../test/dama_doctrine_test_bundle.yaml | 4 + config/packages/test/framework.yaml | 4 + config/packages/test/monolog.yaml | 7 + config/packages/test/twig.yaml | 2 + config/packages/test/validator.yaml | 3 + config/packages/twig.yaml | 2 + config/packages/validator.yaml | 8 + config/routes/api_platform.yaml | 4 + config/routes/dev/framework.yaml | 3 + config/services.yaml | 28 + core/base/Cli/CommandMapper.php | 106 - core/base/Cli/SuiteCommand.php | 19 - core/base/Config/Loader/YamlLoader.php | 42 - core/base/Config/Manager.php | 65 - core/base/Config/ParameterCollection.php | 13 - core/base/Config/modules.config.yml | 4 - core/base/Config/services.config.yml | 2 - core/base/Helper/Data/Collection.php | 127 - core/base/Helper/Data/CollectionInterface.php | 50 - core/base/Helper/File/File.php | 172 - core/base/Helper/File/FileMapperInterface.php | 18 - core/base/Http/Request.php | 42 - core/base/Http/Response.php | 14 - core/base/Instance.php | 109 - core/base/Module/Controller.php | 294 - core/base/Module/Manager.php | 134 - core/base/Module/ModuleCollection.php | 22 - core/base/Module/ModuleInterface.php | 20 - core/base/Module/ModuleMapper.php | 126 - core/base/Module/Service/Manager.php | 34 - .../base/Module/Service/ServiceCollection.php | 22 - .../Service/ServiceFactoryInterface.php | 25 - core/base/Module/Service/ServiceMapper.php | 107 - .../Module/Storage/DataCollectionManager.php | 58 - core/base/Module/Storage/DoctrineCommands.php | 37 - core/base/Module/Storage/Manager.php | 25 - core/base/Module/Storage/TablePrefix.php | 49 - core/base/Module/View/Handler.php | 39 - core/base/Module/View/template/debug.html.php | 3 - .../Module/View/template/default.json.php | 4 - core/base/Route/DefaultRouter.php | 91 - core/base/Route/ModRewriteRouter.php | 99 - core/base/Route/RouterInterface.php | 15 - core/base/RunnableInterface.php | 15 - core/legacy/Authentication.php | 16 +- core/legacy/AuthenticationService.php | 4 +- core/legacy/Navbar.php | 4 +- core/legacy/NavbarService.php | 4 +- .../modules/Administration/Administration.php | 28 - .../Administration/AdministrationBundle.php | 12 + .../Cli/Composer/ComposerInstallCommand.php | 71 - .../Cli/Composer/ComposerUpdateCommand.php | 53 - .../Cli/Modules/ListModulesCommand.php | 63 - .../Cli/Repair/QuickRepairRebuildCommand.php | 33 - .../Cli/Users/AddNewUserCommand.php | 36 - .../Users/Config/orm/OAuthAccessToken.orm.yml | 37 - .../Config/orm/OAuthAuthorizationCode.orm.yml | 42 - .../Users/Config/orm/OAuthClient.orm.yml | 22 - .../Users/Config/orm/OAuthPublicKey.orm.yml | 22 - .../Config/orm/OAuthRefreshToken.orm.yml | 37 - .../Users/Config/orm/OAuthUser.orm.yml | 20 - .../Users/Config/orm/OAuthUserClaims.orm.yml | 15 - core/modules/Users/Controller/Oauth.php | 213 - .../modules/Users/Entity/EncryptableField.php | 31 - .../modules/Users/Entity/OAuthAccessToken.php | 248 - .../Users/Entity/OAuthAuthorizationCode.php | 303 - core/modules/Users/Entity/OAuthClient.php | 195 - core/modules/Users/Entity/OAuthPublicKey.php | 127 - .../Users/Entity/OAuthRefreshToken.php | 245 - core/modules/Users/Entity/OAuthUser.php | 108 - core/modules/Users/Entity/OAuthUserClaims.php | 99 - core/modules/Users/Entity/UserProfile.php | 13 - core/modules/Users/Helper/Authentication.php | 11 - .../Users/Service/AuthenticationService.php | 33 - .../Users/Storage/OAuthAccessTokenStorage.php | 91 - .../Storage/OAuthAuthorizationCodeStorage.php | 82 - .../Users/Storage/OAuthClientStorage.php | 102 - .../Users/Storage/OAuthPublicKeyStorage.php | 33 - .../Storage/OAuthRefreshTokenStorage.php | 104 - .../Users/Storage/OAuthUserClaimsStorage.php | 80 - .../Users/Storage/OAuthUserStorage.php | 68 - core/modules/Users/Users.php | 24 - core/modules/Users/View/index.json.php | 3 - .../App => src/Command}/AppRebuildCommand.php | 157 +- .../Command}/AppThemeRebuildCommand.php | 51 +- .../src/Controller/.gitignore | 0 core/src/DataFixtures/AppFixtures.php | 17 + .../DataProvider/NavbarItemDataProvider.php | 30 + core/src/Entity/Navbar.php | 39 + core/src/Kernel.php | 89 + core/src/Repository/.gitignore | 0 index.php | 86 +- package-lock.json | 18 +- phpunit.xml.dist | 27 + symfony.lock | 554 ++ tests/.gitignore | 0 115 files changed, 5489 insertions(+), 6682 deletions(-) create mode 100644 .env.dist create mode 100644 .env.test.dist create mode 100644 .htaccess create mode 100644 config/bootstrap.php create mode 100644 config/bundles.php create mode 100644 config/packages/api_platform.yaml create mode 100644 config/packages/cache.yaml create mode 100644 config/packages/dev/monolog.yaml create mode 100644 config/packages/doctrine.yaml create mode 100644 config/packages/framework.yaml create mode 100644 config/packages/prod/doctrine.yaml create mode 100644 config/packages/prod/monolog.yaml create mode 100644 config/packages/prod/routing.yaml create mode 100644 config/packages/routing.yaml create mode 100644 config/packages/security.yaml create mode 100644 config/packages/test/dama_doctrine_test_bundle.yaml create mode 100644 config/packages/test/framework.yaml create mode 100644 config/packages/test/monolog.yaml create mode 100644 config/packages/test/twig.yaml create mode 100644 config/packages/test/validator.yaml create mode 100644 config/packages/twig.yaml create mode 100644 config/packages/validator.yaml create mode 100644 config/routes/api_platform.yaml create mode 100644 config/routes/dev/framework.yaml create mode 100644 config/services.yaml delete mode 100644 core/base/Cli/CommandMapper.php delete mode 100644 core/base/Cli/SuiteCommand.php delete mode 100644 core/base/Config/Loader/YamlLoader.php delete mode 100644 core/base/Config/Manager.php delete mode 100644 core/base/Config/ParameterCollection.php delete mode 100644 core/base/Config/modules.config.yml delete mode 100644 core/base/Config/services.config.yml delete mode 100644 core/base/Helper/Data/Collection.php delete mode 100644 core/base/Helper/Data/CollectionInterface.php delete mode 100644 core/base/Helper/File/File.php delete mode 100644 core/base/Helper/File/FileMapperInterface.php delete mode 100644 core/base/Http/Request.php delete mode 100644 core/base/Http/Response.php delete mode 100644 core/base/Instance.php delete mode 100644 core/base/Module/Controller.php delete mode 100644 core/base/Module/Manager.php delete mode 100644 core/base/Module/ModuleCollection.php delete mode 100644 core/base/Module/ModuleInterface.php delete mode 100644 core/base/Module/ModuleMapper.php delete mode 100644 core/base/Module/Service/Manager.php delete mode 100644 core/base/Module/Service/ServiceCollection.php delete mode 100644 core/base/Module/Service/ServiceFactoryInterface.php delete mode 100644 core/base/Module/Service/ServiceMapper.php delete mode 100644 core/base/Module/Storage/DataCollectionManager.php delete mode 100644 core/base/Module/Storage/DoctrineCommands.php delete mode 100644 core/base/Module/Storage/Manager.php delete mode 100644 core/base/Module/Storage/TablePrefix.php delete mode 100644 core/base/Module/View/Handler.php delete mode 100644 core/base/Module/View/template/debug.html.php delete mode 100644 core/base/Module/View/template/default.json.php delete mode 100644 core/base/Route/DefaultRouter.php delete mode 100644 core/base/Route/ModRewriteRouter.php delete mode 100644 core/base/Route/RouterInterface.php delete mode 100644 core/base/RunnableInterface.php delete mode 100644 core/modules/Administration/Administration.php create mode 100644 core/modules/Administration/AdministrationBundle.php delete mode 100644 core/modules/Administration/Cli/Composer/ComposerInstallCommand.php delete mode 100644 core/modules/Administration/Cli/Composer/ComposerUpdateCommand.php delete mode 100644 core/modules/Administration/Cli/Modules/ListModulesCommand.php delete mode 100644 core/modules/Administration/Cli/Repair/QuickRepairRebuildCommand.php delete mode 100644 core/modules/Administration/Cli/Users/AddNewUserCommand.php delete mode 100644 core/modules/Users/Config/orm/OAuthAccessToken.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthAuthorizationCode.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthClient.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthPublicKey.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthRefreshToken.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthUser.orm.yml delete mode 100644 core/modules/Users/Config/orm/OAuthUserClaims.orm.yml delete mode 100644 core/modules/Users/Controller/Oauth.php delete mode 100644 core/modules/Users/Entity/EncryptableField.php delete mode 100644 core/modules/Users/Entity/OAuthAccessToken.php delete mode 100644 core/modules/Users/Entity/OAuthAuthorizationCode.php delete mode 100644 core/modules/Users/Entity/OAuthClient.php delete mode 100644 core/modules/Users/Entity/OAuthPublicKey.php delete mode 100644 core/modules/Users/Entity/OAuthRefreshToken.php delete mode 100644 core/modules/Users/Entity/OAuthUser.php delete mode 100644 core/modules/Users/Entity/OAuthUserClaims.php delete mode 100644 core/modules/Users/Entity/UserProfile.php delete mode 100644 core/modules/Users/Helper/Authentication.php delete mode 100644 core/modules/Users/Service/AuthenticationService.php delete mode 100644 core/modules/Users/Storage/OAuthAccessTokenStorage.php delete mode 100644 core/modules/Users/Storage/OAuthAuthorizationCodeStorage.php delete mode 100644 core/modules/Users/Storage/OAuthClientStorage.php delete mode 100644 core/modules/Users/Storage/OAuthPublicKeyStorage.php delete mode 100644 core/modules/Users/Storage/OAuthRefreshTokenStorage.php delete mode 100644 core/modules/Users/Storage/OAuthUserClaimsStorage.php delete mode 100644 core/modules/Users/Storage/OAuthUserStorage.php delete mode 100644 core/modules/Users/Users.php delete mode 100644 core/modules/Users/View/index.json.php rename core/{modules/Administration/Cli/App => src/Command}/AppRebuildCommand.php (73%) rename core/{modules/Administration/Cli/App => src/Command}/AppThemeRebuildCommand.php (57%) rename config/.gitkeep => core/src/Controller/.gitignore (100%) create mode 100644 core/src/DataFixtures/AppFixtures.php create mode 100644 core/src/DataProvider/NavbarItemDataProvider.php create mode 100644 core/src/Entity/Navbar.php create mode 100644 core/src/Kernel.php create mode 100644 core/src/Repository/.gitignore mode change 100755 => 100644 index.php create mode 100644 phpunit.xml.dist create mode 100644 symfony.lock create mode 100644 tests/.gitignore diff --git a/.env.dist b/.env.dist new file mode 100644 index 000000000..c2bc90073 --- /dev/null +++ b/.env.dist @@ -0,0 +1,38 @@ +# In all environments, the following files are loaded if they exist, +# the latter taking precedence over the former: +# +# * .env.dist contains default values for the environment variables needed by the app +# * .env.local uncommitted file with local overrides +# * .env.$APP_ENV committed environment-specific defaults +# * .env.$APP_ENV.local uncommitted environment-specific overrides +# +# Real environment variables win over .env files. +# +# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES. +# +# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2). + +###> symfony/framework-bundle ### +APP_ENV=dev +APP_SECRET=8d05fae29eaeeda1edf6008093f395b4 +#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 +#TRUSTED_HOSTS='^localhost|example\.com$' +###< symfony/framework-bundle ### + +###> nelmio/cors-bundle ### +CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$ +###< nelmio/cors-bundle ### + +###> doctrine/doctrine-bundle ### +# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url +# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db" +# For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8" +# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml +DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7 +###< doctrine/doctrine-bundle ### + +###> lexik/jwt-authentication-bundle ### +JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem +JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem +JWT_PASSPHRASE=30e1f97a4a670a03fb98ecab5c3e4265 +###< lexik/jwt-authentication-bundle ### diff --git a/.env.test.dist b/.env.test.dist new file mode 100644 index 000000000..f9eff7cbc --- /dev/null +++ b/.env.test.dist @@ -0,0 +1,4 @@ +# define your env variables for the test environment here +KERNEL_CLASS='SuiteCRM\Core\Base\Kernel' +APP_SECRET='$ecretf0rt3st' +SYMFONY_DEPRECATIONS_HELPER=999999 diff --git a/.gitignore b/.gitignore index 0771c3c9b..a12a1306b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,16 @@ ## SuiteCRM 8 ## +###> symfony/framework-bundle ### +/.env +/.env.local +/.env.local.php +/.env.*.local +/config/secrets/prod/prod.decrypt.private.php +/public/bundles/ +/var/ +/vendor/ +###< symfony/framework-bundle ### + build/ config/ !config/.gitkeep diff --git a/.htaccess b/.htaccess new file mode 100644 index 000000000..0379bfcad --- /dev/null +++ b/.htaccess @@ -0,0 +1,66 @@ +# Use the front controller as index file. It serves as a fallback solution when +# every other rewrite/redirect fails (e.g. in an aliased environment without +# mod_rewrite). Additionally, this reduces the matching process for the +# start page (path "/") because otherwise Apache will apply the rewriting rules +# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl). +DirectoryIndex index.php + +# By default, Apache does not evaluate symbolic links if you did not enable this +# feature in your server configuration. Uncomment the following line if you +# install assets as symlinks or if you experience problems related to symlinks +# when compiling LESS/Sass/CoffeScript assets. +# Options FollowSymlinks + +# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve +# to the front controller "/index.php" but be rewritten to "/index.php/index". + + Options -MultiViews + + + + RewriteEngine On + + # Determine the RewriteBase automatically and set it as environment variable. + # If you are using Apache aliases to do mass virtual hosting or installed the + # project in a subdirectory, the base path will be prepended to allow proper + # resolution of the index.php file and to redirect to the correct URI. It will + # work in environments without path prefix as well, providing a safe, one-size + # fits all solution. But as you do not need it in this case, you can comment + # the following 2 lines to eliminate the overhead. + RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$ + RewriteRule .* - [E=BASE:%1] + + # Sets the HTTP_AUTHORIZATION header removed by Apache + RewriteCond %{HTTP:Authorization} .+ + RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] + + # Redirect to URI without front controller to prevent duplicate content + # (with and without `/index.php`). Only do this redirect on the initial + # rewrite by Apache and not on subsequent cycles. Otherwise we would get an + # endless redirect loop (request -> rewrite to front controller -> + # redirect -> request -> ...). + # So in case you get a "too many redirects" error or you always get redirected + # to the start page because your Apache does not expose the REDIRECT_STATUS + # environment variable, you have 2 choices: + # - disable this feature by commenting the following 2 lines or + # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the + # following RewriteCond (best solution) + RewriteCond %{ENV:REDIRECT_STATUS} ="" + RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L] + + # If the requested filename exists, simply serve it. + # We only want to let Apache serve files and not directories. + # Rewrite all other queries to the front controller. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ %{ENV:BASE}/index.php [L] + + + + + # When mod_rewrite is not available, we instruct a temporary redirect of + # the start page to the front controller explicitly so that the website + # and the generated links can still be used. + RedirectMatch 307 ^/$ /index.php/ + # RedirectTemp cannot be used instead + + diff --git a/bin/console b/bin/console index d28a313a9..d55fc0eed 100644 --- a/bin/console +++ b/bin/console @@ -1,25 +1,10 @@ #!/usr/bin/env php getParameterOption(['--env', '-e'], null, true)) { + putenv('APP_ENV=' . $_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = $env); +} + +if ($input->hasParameterOption('--no-debug', true)) { + putenv('APP_DEBUG=' . $_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0'); +} + +require dirname(__DIR__) . '/config/bootstrap.php'; + +if ($_SERVER['APP_DEBUG']) { + umask(0000); + + if (class_exists(Debug::class)) { + /** @noinspection UnusedFunctionResultInspection */ + Debug::enable(); + } +} + +$kernel = new Kernel($_SERVER['APP_ENV'], (bool)$_SERVER['APP_DEBUG']); +$application = new Application($kernel); try { - $appConfig = $configManager->loadFiles(BASE_PATH . 'config/config.yml'); -} catch (Exception $e) { - trigger_error('CLI failed to load files: ' . $e); -} - -if ($appConfig->has('storage.mysql')) { - $connectionParams = $appConfig->get('storage.mysql'); - $namespaces = $appConfig->get('entity.namespaces'); - - $driver = new SimplifiedYamlDriver($namespaces); - - $isDevMode = false; - - if ($appConfig->has('server.environment') && $appConfig->get('server.environment') === 'develop') { - $isDevMode = true; - } - - $config = Setup::createYAMLMetadataConfiguration($namespaces, $isDevMode); - - $cache = new ArrayCache(); - - $config->setMetadataCacheImpl($cache); - $config->setQueryCacheImpl($cache); - $config->setMetadataDriverImpl($driver); - - // Table Prefix - $evm = new EventManager(); - $tablePrefix = new SuiteCRM\Core\Base\Module\Storage\TablePrefix('suite8_'); - $evm->addEventListener(Events::loadClassMetadata, $tablePrefix); - - try { - $entityManager = EntityManager::create($connectionParams, $config, $evm); - } catch (ORMException $e) { - trigger_error('CLI failed to get create entity manager instance: ' . $e); - } - - //-- This I had to add to support the Mysql enum type. - try { - $platform = $entityManager->getConnection()->getDatabasePlatform(); - } catch (DBALException $e) { - trigger_error('CLI failed to get DB platform: ' . $e); - } - - try { - $platform->registerDoctrineTypeMapping('enum', 'string'); - } catch (DBALException $e) { - trigger_error('CLI failed to get register doctrine type mapping: ' . $e); - } - - $helperSet = ConsoleRunner::createHelperSet($entityManager); -} - -$configPath = [BASE_PATH . 'config/config.yml', BASE_PATH . 'core/base/Config/modules.config.yml']; - -$fileHelper = new File(); - -$commandMapper = new CommandMapper($fileHelper, $configManager, $configPath); - -$application->setHelperSet($helperSet); -$application->addCommands($commandMapper->getAllCommands()); - -ConsoleRunner::addCommands($application); - -// Run Console Application -try { - $application->run(); -} catch (Exception $e) { - trigger_error('Application run failure: ' . $e); + $application->run($input); +} catch (Exception $exception) { + echo 'An error occurred while attempting to run the application ' . $exception->getMessage(); } diff --git a/composer.json b/composer.json index 593ea050a..253d6d483 100755 --- a/composer.json +++ b/composer.json @@ -13,26 +13,47 @@ }, "require": { "ext-json": "*", + "api-platform/api-pack": "^1.2", "bshaffer/oauth2-server-httpfoundation-bridge": "^1.4", "bshaffer/oauth2-server-php": "^1.11.1", "composer/installers": "~1.0", "doctrine/cache": "^1.8", "doctrine/dbal": "^2.9", "doctrine/orm": "2.6.*", + "lexik/jwt-authentication-bundle": "^2.6", "monolog/monolog": "^1.23", + "phpdocumentor/type-resolver": "^0.4.0", + "pimple/pimple": "^3.2", + "psr/log": "^1.1", + "symfony/cache": "^4.4", "symfony/config": "^4.2", - "symfony/console": "^4.3", + "symfony/console": "^4.4", + "symfony/dependency-injection": "^4.4", + "symfony/dotenv": "^4.4", + "symfony/error-handler": "^4.4", + "symfony/filesystem": "^4.4", + "symfony/finder": "^4.4", + "symfony/flex": "^1.6", + "symfony/framework-bundle": "^4.4", "symfony/http-foundation": "^4.2", + "symfony/http-kernel": "^4.4", + "symfony/monolog-bundle": "^3.5", "symfony/routing": "4.4.x-dev", - "symfony/yaml": "^4.2" + "symfony/yaml": "^4.2", + "thecodingmachine/graphqlite": "^3.1", + "webonyx/graphql-php": "^0.13.8" }, "require-dev": { - "roave/security-advisories": "dev-master", - "phpunit/phpunit": "^7.3", - "phpmetrics/phpmetrics": "^2.4.1", - "phploc/phploc": "^4.0.1", + "dama/doctrine-test-bundle": "^5.0", "doctrine/doctrine-fixtures-bundle": "~3.2", - "dama/doctrine-test-bundle": "^5.0" + "phploc/phploc": "^4.0.1", + "phpmetrics/phpmetrics": "^2.4.1", + "phpunit/phpunit": "^7.3", + "roave/security-advisories": "dev-master", + "symfony/maker-bundle": "^1.14" + }, + "conflict": { + "symfony/symfony": "*" }, "license": "GPL-3.0", "authors": [ @@ -44,9 +65,19 @@ "psr-4": { "SuiteCRM\\Core\\Base\\": "core/base/", "SuiteCRM\\Core\\Modules\\": "core/modules/", - "SuiteCRM\\Core\\Legacy\\": "core/legacy/" + "SuiteCRM\\Core\\Legacy\\": "core/legacy/", + "App\\Command\\": "core/base/src/Command/" } }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "extra": { + "src-dir": "core/base/src" + }, + "scripts": { + "auto-scripts": { + "cache:clear": "symfony-cmd", + "assets:install %PUBLIC_DIR%": "symfony-cmd" + } + } } diff --git a/composer.lock b/composer.lock index 3f43d371a..bf793b06b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,192 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1dd262db5abdd532a2ad48b4d72b44c7", + "content-hash": "6a95edda9e84873edcf1c4aec758eeaa", "packages": [ + { + "name": "api-platform/api-pack", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/api-platform/api-pack.git", + "reference": "41364f8763475d7709c43f790aa77a4157d038e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/api-platform/api-pack/zipball/41364f8763475d7709c43f790aa77a4157d038e2", + "reference": "41364f8763475d7709c43f790aa77a4157d038e2", + "shasum": "" + }, + "require": { + "api-platform/core": "^2.1", + "doctrine/annotations": "^1.0", + "doctrine/doctrine-bundle": "^1.6 || ^2.0", + "doctrine/orm": "^2.4.5", + "nelmio/cors-bundle": "^1.5 || ^2.0", + "php": "^7.0", + "phpdocumentor/reflection-docblock": "^3.0 || ^4.0", + "symfony/asset": "*", + "symfony/expression-language": "*", + "symfony/security-bundle": "*", + "symfony/twig-bundle": "*", + "symfony/validator": "*" + }, + "type": "symfony-pack", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A pack for API Platform", + "time": "2019-11-12T17:43:33+00:00" + }, + { + "name": "api-platform/core", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/api-platform/core.git", + "reference": "2d402688c485457adbc771e347e6498e70c6f232" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/api-platform/core/zipball/2d402688c485457adbc771e347e6498e70c6f232", + "reference": "2d402688c485457adbc771e347e6498e70c6f232", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.0", + "fig/link-util": "^1.0", + "php": ">=7.1", + "psr/cache": "^1.0", + "psr/container": "^1.0", + "symfony/http-foundation": "^4.3.6 || ^5.0", + "symfony/http-kernel": "^4.3.7 || ^5.0", + "symfony/property-access": "^3.4 || ^4.0 || ^5.0", + "symfony/property-info": "^3.4 || ^4.0 || ^5.0", + "symfony/serializer": "^4.3 || ^5.0", + "symfony/web-link": "^4.1 || ^5.0", + "willdurand/negotiation": "^2.0.3" + }, + "conflict": { + "doctrine/common": "<2.7", + "doctrine/mongodb-odm": "<2.0" + }, + "require-dev": { + "behat/behat": "^3.1", + "behat/mink": "^1.7", + "behat/mink-browserkit-driver": "^1.3.1", + "behat/mink-extension": "^2.2", + "behat/symfony2-extension": "^2.1.1", + "behatch/contexts": "^3.1.0", + "doctrine/annotations": "^1.7", + "doctrine/common": "^2.11", + "doctrine/data-fixtures": "^1.2.2", + "doctrine/doctrine-bundle": "^1.8 || ^2.0", + "doctrine/doctrine-cache-bundle": "^1.3.5", + "doctrine/mongodb-odm": "^2.0", + "doctrine/mongodb-odm-bundle": "^4.0", + "doctrine/orm": "^2.6.4", + "elasticsearch/elasticsearch": "^6.0", + "friendsofsymfony/user-bundle": "^2.2@dev", + "guzzlehttp/guzzle": "^6.0", + "jangregor/phpstan-prophecy": "^0.4.2", + "justinrainbow/json-schema": "^5.2.1", + "nelmio/api-doc-bundle": "^2.13.4", + "phpdocumentor/reflection-docblock": "^3.0 || ^4.0", + "phpdocumentor/type-resolver": "^0.3 || ^0.4", + "phpspec/prophecy": "^1.8", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.11.10", + "phpstan/phpstan-doctrine": "^0.11.5", + "phpstan/phpstan-phpunit": "^0.11.2", + "phpstan/phpstan-symfony": "^0.11.6", + "phpunit/phpunit": "^7.5.2 || ^8.0", + "psr/log": "^1.0", + "ramsey/uuid": "^3.7", + "ramsey/uuid-doctrine": "^1.4", + "sebastian/object-enumerator": "^3.0.3", + "symfony/asset": "^3.4 || ^4.0 || ^5.0", + "symfony/browser-kit": "^4.3 || ^5.0", + "symfony/cache": "^3.4 || ^4.0 || ^5.0", + "symfony/config": "^3.4 || ^4.0 || ^5.0", + "symfony/console": "^3.4 || ^4.0 || ^5.0", + "symfony/css-selector": "^3.4 || ^4.0 || ^5.0", + "symfony/debug": "^3.4 || ^4.0", + "symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0", + "symfony/doctrine-bridge": "^3.4 || ^4.0 || ^5.0", + "symfony/dom-crawler": "^3.4 || ^4.0 || ^5.0", + "symfony/event-dispatcher": "^3.4 || ^4.0 || ^5.0", + "symfony/expression-language": "^3.4 || ^4.0 || ^5.0", + "symfony/finder": "^3.4 || ^4.0 || ^5.0", + "symfony/form": "^3.4 || ^4.0 || ^5.0", + "symfony/framework-bundle": "^4.3.2 || ^5.0", + "symfony/http-client": "^4.3 || ^5.0", + "symfony/mercure-bundle": "*", + "symfony/messenger": "^4.3 || ^5.0", + "symfony/phpunit-bridge": "^4.3 || ^5.0", + "symfony/routing": "^3.4 || ^4.3 || ^5.0", + "symfony/security-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/security-core": "^4.3 || ^5.0", + "symfony/twig-bundle": "^3.4 || ^4.0 || ^5.0", + "symfony/validator": "^3.4 || ^4.0 || ^5.0", + "symfony/web-profiler-bundle": "^4.2 || ^5.0", + "symfony/yaml": "^3.4 || ^4.0 || ^5.0", + "twig/twig": "^1.42.3 || ^2.12", + "webonyx/graphql-php": ">=0.13.1 <1.0" + }, + "suggest": { + "doctrine/mongodb-odm-bundle": "To support MongoDB. Only versions 4.0 and later are supported.", + "elasticsearch/elasticsearch": "To support Elasticsearch.", + "friendsofsymfony/user-bundle": "To use the FOSUserBundle bridge.", + "guzzlehttp/guzzle": "To use the HTTP cache invalidation system.", + "phpdocumentor/reflection-docblock": "To support extracting metadata from PHPDoc.", + "psr/cache-implementation": "To use metadata caching.", + "ramsey/uuid": "To support Ramsey's UUID identifiers.", + "symfony/cache": "To have metadata caching when using Symfony integration.", + "symfony/config": "To load XML configuration files.", + "symfony/expression-language": "To use authorization features.", + "symfony/security": "To use authorization features.", + "symfony/twig-bundle": "To use the Swagger UI integration.", + "symfony/web-profiler-bundle": "To use the data collector.", + "webonyx/graphql-php": "To support GraphQL." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "ApiPlatform\\Core\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com", + "homepage": "https://dunglas.fr" + } + ], + "description": "Build a fully-featured hypermedia or GraphQL API in minutes", + "homepage": "https://api-platform.com", + "keywords": [ + "Hydra", + "JSON-LD", + "api", + "graphql", + "hal", + "jsonapi", + "openapi", + "rest", + "swagger" + ], + "time": "2019-11-23T11:27:39+00:00" + }, { "name": "bshaffer/oauth2-server-httpfoundation-bridge", "version": "v1.4", @@ -110,142 +294,6 @@ ], "time": "2018-12-04T00:29:32+00:00" }, - { - "name": "composer/ca-bundle", - "version": "1.2.4", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", - "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "time": "2019-08-30T08:44:50+00:00" - }, - { - "name": "composer/composer", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f", - "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^1.1", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "time": "2019-11-01T16:20:17+00:00" - }, { "name": "composer/installers", "version": "v1.7.0", @@ -368,172 +416,6 @@ ], "time": "2019-08-12T15:00:31+00:00" }, - { - "name": "composer/semver", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", - "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "time": "2019-03-19T17:25:45+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5", - "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "time": "2019-07-29T10:31:59+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "cbe23383749496fe0f373345208b79568e4bc248" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", - "reference": "cbe23383749496fe0f373345208b79568e4bc248", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "time": "2019-11-06T16:40:04+00:00" - }, { "name": "doctrine/annotations", "version": "v1.8.0", @@ -839,16 +721,16 @@ }, { "name": "doctrine/dbal", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934" + "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934", - "reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", + "reference": "c2b8e6e82732a64ecde1cddf9e1e06cb8556e3d8", "shasum": "" }, "require": { @@ -927,7 +809,98 @@ "sqlserver", "sqlsrv" ], - "time": "2019-11-03T16:50:43+00:00" + "time": "2020-01-04T12:56:21+00:00" + }, + { + "name": "doctrine/doctrine-bundle", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineBundle.git", + "reference": "0ef972d3b730f975c80db9fffa4b2a0258c91442" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ef972d3b730f975c80db9fffa4b2a0258c91442", + "reference": "0ef972d3b730f975c80db9fffa4b2a0258c91442", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.9.0", + "doctrine/persistence": "^1.3.3", + "jdorn/sql-formatter": "^1.2.16", + "php": "^7.1", + "symfony/cache": "^4.3.3|^5.0", + "symfony/config": "^4.3.3|^5.0", + "symfony/console": "^3.4.30|^4.3.3|^5.0", + "symfony/dependency-injection": "^4.3.3|^5.0", + "symfony/doctrine-bridge": "^4.3.7|^5.0", + "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/service-contracts": "^1.1.1|^2.0" + }, + "conflict": { + "doctrine/orm": "<2.6", + "twig/twig": "<1.34|>=2.0,<2.4" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "doctrine/orm": "^2.6", + "ocramius/proxy-manager": "^2.1", + "phpunit/phpunit": "^7.5", + "symfony/phpunit-bridge": "^4.2", + "symfony/property-info": "^4.3.3|^5.0", + "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", + "symfony/validator": "^3.4.30|^4.3.3|^5.0", + "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", + "symfony/yaml": "^3.4.30|^4.3.3|^5.0", + "twig/twig": "^1.34|^2.12" + }, + "suggest": { + "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", + "symfony/web-profiler-bundle": "To use the data collector." + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\DoctrineBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org/" + } + ], + "description": "Symfony DoctrineBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "orm", + "persistence" + ], + "time": "2019-12-19T13:47:07+00:00" }, { "name": "doctrine/event-manager", @@ -1273,16 +1246,16 @@ }, { "name": "doctrine/persistence", - "version": "1.2.0", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "43526ae63312942e5316100bb3ed589ba1aba491" + "reference": "99b196bbd4715a94fa100fac664a351ffa46d6a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/43526ae63312942e5316100bb3ed589ba1aba491", - "reference": "43526ae63312942e5316100bb3ed589ba1aba491", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/99b196bbd4715a94fa100fac664a351ffa46d6a5", + "reference": "99b196bbd4715a94fa100fac664a351ffa46d6a5", "shasum": "" }, "require": { @@ -1297,19 +1270,20 @@ "doctrine/common": "<2.10@dev" }, "require-dev": { - "doctrine/coding-standard": "^5.0", - "phpstan/phpstan": "^0.8", + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11", "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "lib/Doctrine/Common", + "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -1351,7 +1325,7 @@ "orm", "persistence" ], - "time": "2019-04-23T12:39:21+00:00" + "time": "2019-12-13T10:43:02+00:00" }, { "name": "doctrine/reflection", @@ -1429,39 +1403,85 @@ "time": "2018-06-14T14:45:07+00:00" }, { - "name": "justinrainbow/json-schema", - "version": "5.2.9", + "name": "ecodev/graphql-upload", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4" + "url": "https://github.com/Ecodev/graphql-upload.git", + "reference": "7bc34bccab0dfc61e3307a43980d8a4a477ec37c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4", - "reference": "44c6787311242a979fa15c704327c20e7221a0e4", + "url": "https://api.github.com/repos/Ecodev/graphql-upload/zipball/7bc34bccab0dfc61e3307a43980d8a4a477ec37c", + "reference": "7bc34bccab0dfc61e3307a43980d8a4a477ec37c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-json": "*", + "php": "^7.1", + "psr/http-server-middleware": "^1.0", + "webonyx/graphql-php": "^0.13.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "friendsofphp/php-cs-fixer": "@stable", + "phpstan/phpstan": "^0.10.5", + "phpunit/phpunit": "@stable", + "zendframework/zend-diactoros": "@stable" }, - "bin": [ - "bin/validate-json" + "type": "library", + "autoload": { + "psr-4": { + "GraphQL\\Upload\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], + "description": "A middleware to support file uploads in GraphQL", + "keywords": [ + "api", + "graphql", + "middleware", + "multipart", + "upload" + ], + "time": "2018-12-04T05:49:23+00:00" + }, + { + "name": "fig/link-util", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link-util.git", + "reference": "47f55860678a9e202206047bc02767556d298106" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link-util/zipball/47f55860678a9e202206047bc02767556d298106", + "reference": "47f55860678a9e202206047bc02767556d298106", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/link": "~1.0@dev" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.1", + "squizlabs/php_codesniffer": "^2.3.1" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "JsonSchema\\": "src/JsonSchema/" + "Fig\\Link\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1470,42 +1490,234 @@ ], "authors": [ { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "description": "Common utility implementations for HTTP links", "keywords": [ - "json", - "schema" + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" ], - "time": "2019-09-25T14:49:45+00:00" + "time": "2019-12-18T15:40:05+00:00" }, { - "name": "monolog/monolog", - "version": "1.25.2", + "name": "jdorn/sql-formatter", + "version": "v1.2.17", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287" + "url": "https://github.com/jdorn/sql-formatter.git", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d5e2fb341cb44f7e2ab639d12a1e5901091ec287", - "reference": "d5e2fb341cb44f7e2ab639d12a1e5901091ec287", + "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", + "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "lib" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "http://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/jdorn/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "time": "2014-01-12T16:20:24+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "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" + ], + "time": "2019-05-24T18:30:49+00:00" + }, + { + "name": "lexik/jwt-authentication-bundle", + "version": "v2.6.5", + "source": { + "type": "git", + "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git", + "reference": "448551fc08c6cff37aad9d8f27f6b9615cd28966" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/448551fc08c6cff37aad9d8f27f6b9615cd28966", + "reference": "448551fc08c6cff37aad9d8f27f6b9615cd28966", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "lcobucci/jwt": "^3.2", + "namshi/jose": "^7.2", + "php": "^5.5|^7.0", + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/security-bundle": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "symfony/browser-kit": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony", + "spomky-labs/lexik-jose-bridge": "Provides a JWT Token encoder with encryption support" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Lexik\\Bundle\\JWTAuthenticationBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Barthe", + "email": "j.barthe@lexik.fr", + "homepage": "https://github.com/jeremyb" + }, + { + "name": "Nicolas Cabot", + "email": "n.cabot@lexik.fr", + "homepage": "https://github.com/slashfan" + }, + { + "name": "Cedric Girard", + "email": "c.girard@lexik.fr", + "homepage": "https://github.com/cedric-g" + }, + { + "name": "Dev Lexik", + "email": "dev@lexik.fr", + "homepage": "https://github.com/lexik" + }, + { + "name": "Robin Chalas", + "email": "robin.chalas@gmail.com", + "homepage": "https://github.com/chalasr" + }, + { + "name": "Lexik Community", + "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle/graphs/contributors" + } + ], + "description": "This bundle provides JWT authentication for your Symfony REST API", + "homepage": "https://github.com/lexik/LexikJWTAuthenticationBundle", + "keywords": [ + "Authentication", + "JWS", + "api", + "bundle", + "jwt", + "rest", + "symfony" + ], + "time": "2019-11-22T14:22:26+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.25.3", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1", + "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1", "shasum": "" }, "require": { @@ -1570,7 +1782,422 @@ "logging", "psr-3" ], - "time": "2019-11-13T10:00:05+00:00" + "time": "2019-12-20T14:15:16+00:00" + }, + { + "name": "mouf/classname-mapper", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/classname-mapper.git", + "reference": "fa32a0ef5a45292d2240a405aed8a1aa5f04d642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/classname-mapper/zipball/fa32a0ef5a45292d2240a405aed8a1aa5f04d642", + "reference": "fa32a0ef5a45292d2240a405aed8a1aa5f04d642", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0 | ~5.0", + "satooshi/php-coveralls": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mouf\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com", + "homepage": "http://mouf-php.com" + } + ], + "description": "Provides a way to find in which PHP files a class will be looked upon.", + "homepage": "http://mouf-php.com/packages/thecodingmachine/classname-mapper", + "keywords": [ + "autoload", + "composer" + ], + "time": "2019-01-17T16:26:30+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" + ], + "time": "2016-12-05T07:27:31+00:00" + }, + { + "name": "nelmio/cors-bundle", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/nelmio/NelmioCorsBundle.git", + "reference": "9683e6d30d000ef998919261329d825de7c53499" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/9683e6d30d000ef998919261329d825de7c53499", + "reference": "9683e6d30d000ef998919261329d825de7c53499", + "shasum": "" + }, + "require": { + "symfony/framework-bundle": "^4.3 || ^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.2", + "symfony/phpunit-bridge": "^4.3 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Nelmio\\CorsBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nelmio", + "homepage": "http://nelm.io" + }, + { + "name": "Symfony Community", + "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" + } + ], + "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony application", + "keywords": [ + "api", + "cors", + "crossdomain" + ], + "time": "2019-11-15T08:54:08+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2019-12-28T18:55:12+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2018-01-21T07:42:36+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" + ], + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/container", @@ -1621,6 +2248,211 @@ ], "time": "2017-02-14T16:28:37+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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/http-server-handler", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "time": "2018-10-30T16:46:14+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "time": "2018-10-30T17:12:04+00:00" + }, + { + "name": "psr/link", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "time": "2016-10-28T16:06:13+00:00" + }, { "name": "psr/log", "version": "1.1.2", @@ -1669,80 +2501,31 @@ "time": "2019-11-01T11:05:21+00:00" }, { - "name": "seld/jsonlint", - "version": "1.7.2", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19", - "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "time": "2019-10-24T14:27:39+00:00" - }, - { - "name": "seld/phar-utils", + "name": "psr/simple-cache", "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Seld\\PharUtils\\": "src/" + "Psr\\SimpleCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1751,28 +2534,225 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "PHAR file format utilities, for when PHP phars you up", + "description": "Common interfaces for simple caching", "keywords": [ - "phra" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2015-10-13T18:44:15+00:00" + "time": "2017-10-23T01:57:42+00:00" }, { - "name": "symfony/config", - "version": "v4.4.1", + "name": "symfony/asset", + "version": "v4.4.2", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c" + "url": "https://github.com/symfony/asset.git", + "reference": "7ec5fc653dab63d7519a6f411982ee224a696d66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", - "reference": "7aa5817f1b7a8ed377752b90fcc47dfb3c67b40c", + "url": "https://api.github.com/repos/symfony/asset/zipball/7ec5fc653dab63d7519a6f411982ee224a696d66", + "reference": "7ec5fc653dab63d7519a6f411982ee224a696d66", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/http-foundation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Asset\\": "" + }, + "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": "Symfony Asset Component", + "homepage": "https://symfony.com", + "time": "2019-10-12T00:35:04+00:00" + }, + { + "name": "symfony/cache", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "6af64bab165e588300378a87bcd2df3c7c31c144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/6af64bab165e588300378a87bcd2df3c7c31c144", + "reference": "6af64bab165e588300378a87bcd2df3c7c31c144", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.2|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.5", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.5", + "predis/predis": "~1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^3.4|^4.1|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "time": "2019-12-16T10:45:21+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v1.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/af50d14ada9e4e82cfabfabdc502d144f89be0a1", + "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-10-04T21:43:27+00:00" + }, + { + "name": "symfony/config", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "6911d432edd5b50822986604fd5a5be3af856d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/6911d432edd5b50822986604fd5a5be3af856d30", + "reference": "6911d432edd5b50822986604fd5a5be3af856d30", "shasum": "" }, "require": { @@ -1823,20 +2803,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:50:45+00:00" + "time": "2019-12-18T12:00:29+00:00" }, { "name": "symfony/console", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201" + "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f0aea3df20d15635b3cb9730ca5eea1c65b7f201", - "reference": "f0aea3df20d15635b3cb9730ca5eea1c65b7f201", + "url": "https://api.github.com/repos/symfony/console/zipball/82437719dab1e6bdd28726af14cb345c2ec816d0", + "reference": "82437719dab1e6bdd28726af14cb345c2ec816d0", "shasum": "" }, "require": { @@ -1899,11 +2879,526 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-12-01T10:06:17+00:00" + "time": "2019-12-17T10:32:23+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", + "reference": "5c4c1db977dc70bb3250e1308d3e8c6341aa38f5", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "^3.4|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2019-12-16T14:46:54+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "79b0358207a3571cc3af02a57d0321927921f539" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/79b0358207a3571cc3af02a57d0321927921f539", + "reference": "79b0358207a3571cc3af02a57d0321927921f539", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/config": "<4.3|>=5.0", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" + }, + "require-dev": { + "symfony/config": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "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": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2019-12-19T16:00:02+00:00" + }, + { + "name": "symfony/doctrine-bridge", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-bridge.git", + "reference": "3e40beb8dbb06d2967e37938f4c3f20f425137a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3e40beb8dbb06d2967e37938f4c3f20f425137a6", + "reference": "3e40beb8dbb06d2967e37938f4c3f20f425137a6", + "shasum": "" + }, + "require": { + "doctrine/event-manager": "~1.0", + "doctrine/persistence": "^1.3", + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/dependency-injection": "<3.4", + "symfony/form": "<4.4", + "symfony/http-kernel": "<4.3.7", + "symfony/messenger": "<4.3", + "symfony/security-core": "<4.4", + "symfony/validator": "<4.4.2|<5.0.2,>=5.0" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.6", + "doctrine/collections": "~1.0", + "doctrine/data-fixtures": "1.0.*", + "doctrine/dbal": "~2.4", + "doctrine/orm": "^2.6.3", + "doctrine/reflection": "~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/form": "^4.4|^5.0", + "symfony/http-kernel": "^4.3.7", + "symfony/messenger": "^4.4|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/proxy-manager-bridge": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/translation": "^3.4|^4.0|^5.0", + "symfony/validator": "^4.4.2|^5.0.2", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/data-fixtures": "", + "doctrine/dbal": "", + "doctrine/orm": "", + "symfony/form": "", + "symfony/property-info": "", + "symfony/validator": "" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "" + }, + "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": "Symfony Doctrine Bridge", + "homepage": "https://symfony.com", + "time": "2019-12-17T08:15:02+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "c387ab37887f997162a8579d335b38f328d27859" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/c387ab37887f997162a8579d335b38f328d27859", + "reference": "c387ab37887f997162a8579d335b38f328d27859", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "symfony/process": "^3.4.2|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "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": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2019-12-19T15:57:49+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6d7d7712a6ff5215ec26215672293b154f1db8c1", + "reference": "6d7d7712a6ff5215ec26215672293b154f1db8c1", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/debug": "^4.4", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "time": "2019-12-16T14:46:54+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b3c3068a72623287550fe20b84a2b01dcba2686f", + "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f", + "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/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", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-11-28T13:33:56+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "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" + ], + "time": "2019-09-17T09:54:03+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "539e7ff0b635c8b90d8127bc929da781a96eab2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/539e7ff0b635c8b90d8127bc929da781a96eab2d", + "reference": "539e7ff0b635c8b90d8127bc929da781a96eab2d", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "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": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "time": "2019-12-10T10:33:21+00:00" }, { "name": "symfony/filesystem", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -1953,7 +3448,7 @@ }, { "name": "symfony/finder", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", @@ -2001,17 +3496,197 @@ "time": "2019-11-17T21:56:56+00:00" }, { - "name": "symfony/http-foundation", - "version": "v4.4.1", + "name": "symfony/flex", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5" + "url": "https://github.com/symfony/flex.git", + "reference": "952f45d1c5077e658cb16a61d11603bee873f968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8bccc59e61b41963d14c3dbdb23181e5c932a1d5", - "reference": "8bccc59e61b41963d14c3dbdb23181e5c932a1d5", + "url": "https://api.github.com/repos/symfony/flex/zipball/952f45d1c5077e658cb16a61d11603bee873f968", + "reference": "952f45d1c5077e658cb16a61d11603bee873f968", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^7.0" + }, + "require-dev": { + "composer/composer": "^1.0.2", + "symfony/dotenv": "^3.4|^4.0|^5.0", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8|^5.0", + "symfony/process": "^2.7|^3.0|^4.0|^5.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + }, + "class": "Symfony\\Flex\\Flex" + }, + "autoload": { + "psr-4": { + "Symfony\\Flex\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "Composer plugin for Symfony", + "time": "2019-12-13T18:05:11+00:00" + }, + { + "name": "symfony/framework-bundle", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/framework-bundle.git", + "reference": "c80526b4c22f6ddc23080225bf276f094d2c398e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/c80526b4c22f6ddc23080225bf276f094d2c398e", + "reference": "c80526b4c22f6ddc23080225bf276f094d2c398e", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.1.3", + "symfony/cache": "^4.4|^5.0", + "symfony/config": "^4.3.4|^5.0", + "symfony/dependency-injection": "^4.4.1|^5.0.1", + "symfony/error-handler": "^4.4.1|^5.0.1", + "symfony/filesystem": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-mbstring": "~1.0", + "symfony/routing": "^4.4|^5.0" + }, + "conflict": { + "doctrine/persistence": "<1.3", + "phpdocumentor/reflection-docblock": "<3.0", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/asset": "<3.4", + "symfony/browser-kit": "<4.3", + "symfony/console": "<4.3", + "symfony/dom-crawler": "<4.3", + "symfony/dotenv": "<4.3.6", + "symfony/form": "<4.3.5", + "symfony/http-client": "<4.4", + "symfony/lock": "<4.4", + "symfony/mailer": "<4.4", + "symfony/messenger": "<4.4", + "symfony/mime": "<4.4", + "symfony/property-info": "<3.4", + "symfony/security-bundle": "<4.4", + "symfony/serializer": "<4.4", + "symfony/stopwatch": "<3.4", + "symfony/translation": "<4.4", + "symfony/twig-bridge": "<4.1.1", + "symfony/twig-bundle": "<4.4", + "symfony/validator": "<4.4", + "symfony/web-profiler-bundle": "<4.4", + "symfony/workflow": "<4.3.6" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "paragonie/sodium_compat": "^1.8", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/browser-kit": "^4.3|^5.0", + "symfony/console": "^4.3.4|^5.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^4.3|^5.0", + "symfony/dotenv": "^4.3.6|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^4.3.5|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/mailer": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^3.4|^4.0|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/templating": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^4.4|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3.6|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/twig": "^1.41|^2.10|^3.0" + }, + "suggest": { + "ext-apcu": "For best performance of the system caches", + "symfony/console": "For using the console commands", + "symfony/form": "For using forms", + "symfony/property-info": "For using the property_info service", + "symfony/serializer": "For using the serializer service", + "symfony/validator": "For using validation", + "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", + "symfony/yaml": "For using the debug:config and lint:yaml commands" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\FrameworkBundle\\": "" + }, + "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": "Symfony FrameworkBundle", + "homepage": "https://symfony.com", + "time": "2019-12-17T08:15:02+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/fcae1cff5b57b2a9c3aabefeb1527678705ddb62", + "reference": "fcae1cff5b57b2a9c3aabefeb1527678705ddb62", "shasum": "" }, "require": { @@ -2053,11 +3728,225 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "time": "2019-12-19T15:57:49+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fe310d2e95cd4c356836c8ecb0895a46d97fede2", + "reference": "fe310d2e95cd4c356836c8ecb0895a46d97fede2", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/error-handler": "^4.4", + "symfony/event-dispatcher": "^4.4", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9" + }, + "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.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.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.34|^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2019-12-19T16:23:40+00:00" + }, + { + "name": "symfony/inflector", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/inflector.git", + "reference": "98581481d9ddabe4db3a66e10202fe1fa08d791b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/inflector/zipball/98581481d9ddabe4db3a66e10202fe1fa08d791b", + "reference": "98581481d9ddabe4db3a66e10202fe1fa08d791b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Inflector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Inflector Component", + "homepage": "https://symfony.com", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string", + "symfony", + "words" + ], + "time": "2019-11-06T12:02:32+00:00" + }, + { + "name": "symfony/lock", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/lock.git", + "reference": "738d8a5d8d093a1e30ff98909c8ad9ed91944601" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/lock/zipball/738d8a5d8d093a1e30ff98909c8ad9ed91944601", + "reference": "738d8a5d8d093a1e30ff98909c8ad9ed91944601", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "doctrine/dbal": "<2.5" + }, + "require-dev": { + "doctrine/dbal": "~2.5", + "mongodb/mongodb": "~1.1", + "predis/predis": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Lock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jérémy Derussé", + "email": "jeremy@derusse.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Lock Component", + "homepage": "https://symfony.com", + "keywords": [ + "cas", + "flock", + "locking", + "mutex", + "redlock", + "semaphore" + ], + "time": "2019-12-13T08:10:41+00:00" }, { "name": "symfony/mime", - "version": "v4.4.1", + "version": "v4.4.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -2117,6 +4006,136 @@ ], "time": "2019-11-30T08:27:26+00:00" }, + { + "name": "symfony/monolog-bridge", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bridge.git", + "reference": "da3718c84f29d4b1ef607e2a13c496186a5975c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/da3718c84f29d4b1ef607e2a13c496186a5975c1", + "reference": "da3718c84f29d4b1ef607e2a13c496186a5975c1", + "shasum": "" + }, + "require": { + "monolog/monolog": "^1.25.1", + "php": "^7.1.3", + "symfony/http-kernel": "^4.3", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/http-foundation": "<3.4" + }, + "require-dev": { + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", + "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", + "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Monolog\\": "" + }, + "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": "Symfony Monolog Bridge", + "homepage": "https://symfony.com", + "time": "2019-12-10T10:33:21+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", + "reference": "dd80460fcfe1fa2050a7103ad818e9d0686ce6fd", + "shasum": "" + }, + "require": { + "monolog/monolog": "~1.22 || ~2.0", + "php": ">=5.6", + "symfony/config": "~3.4 || ~4.0 || ^5.0", + "symfony/dependency-injection": "~3.4.10 || ^4.0.10 || ^5.0", + "symfony/http-kernel": "~3.4 || ~4.0 || ^5.0", + "symfony/monolog-bridge": "~3.4 || ~4.0 || ^5.0" + }, + "require-dev": { + "symfony/console": "~3.4 || ~4.0 || ^5.0", + "symfony/phpunit-bridge": "^3.4.19 || ^4.0 || ^5.0", + "symfony/yaml": "~3.4 || ~4.0 || ^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\MonologBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony MonologBundle", + "homepage": "http://symfony.com", + "keywords": [ + "log", + "logging" + ], + "time": "2019-11-13T13:11:14+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.13.1", @@ -2296,6 +4315,62 @@ ], "time": "2019-11-27T14:18:11+00:00" }, + { + "name": "symfony/polyfill-php56", + "version": "v1.13.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/53dd1cdf3cb986893ccf2b96665b25b3abb384f4", + "reference": "53dd1cdf3cb986893ccf2b96665b25b3abb384f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.13-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "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 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-11-27T13:56:44+00:00" + }, { "name": "symfony/polyfill-php72", "version": "v1.13.1", @@ -2410,21 +4485,80 @@ "time": "2019-11-27T16:25:15+00:00" }, { - "name": "symfony/process", - "version": "v4.4.1", + "name": "symfony/polyfill-util", + "version": "v1.13.1", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726" + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "964a67f293b66b95883a5ed918a65354fcd2258f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/51c0135ef3f44c5803b33dc60e96bf4f77752726", - "reference": "51c0135ef3f44c5803b33dc60e96bf4f77752726", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/964a67f293b66b95883a5ed918a65354fcd2258f", + "reference": "964a67f293b66b95883a5ed918a65354fcd2258f", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.13-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "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 utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2019-11-27T13:56:44+00:00" + }, + { + "name": "symfony/property-access", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "055fe3134f8f301ff44af314d83463b858ea6413" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/055fe3134f8f301ff44af314d83463b858ea6413", + "reference": "055fe3134f8f301ff44af314d83463b858ea6413", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" + }, + "require-dev": { + "symfony/cache": "^3.4|^4.0|^5.0" + }, + "suggest": { + "psr/cache-implementation": "To cache access methods." }, "type": "library", "extra": { @@ -2434,7 +4568,7 @@ }, "autoload": { "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Component\\PropertyAccess\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -2454,9 +4588,96 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Symfony PropertyAccess Component", "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property path", + "reflection" + ], + "time": "2019-12-10T10:33:21+00:00" + }, + { + "name": "symfony/property-info", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "8afd280f159697177e48eefa89efd4db60a57665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/8afd280f159697177e48eefa89efd4db60a57665", + "reference": "8afd280f159697177e48eefa89efd4db60a57665", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/inflector": "^3.4|^4.0|^5.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.3.0", + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/serializer": "^3.4|^4.0|^5.0" + }, + "suggest": { + "phpdocumentor/reflection-docblock": "To use the PHPDoc", + "psr/cache-implementation": "To cache results", + "symfony/doctrine-bridge": "To use Doctrine metadata", + "symfony/serializer": "To use Serializer metadata" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Property Info Component", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "time": "2019-11-05T16:11:08+00:00" }, { "name": "symfony/routing", @@ -2464,12 +4685,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273" + "reference": "6faed8df36d5532db9f2b0d906bd746ad8bcd0c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/51f3f20ad29329a0bdf5c0e2f722d3764b065273", - "reference": "51f3f20ad29329a0bdf5c0e2f722d3764b065273", + "url": "https://api.github.com/repos/symfony/routing/zipball/6faed8df36d5532db9f2b0d906bd746ad8bcd0c8", + "reference": "6faed8df36d5532db9f2b0d906bd746ad8bcd0c8", "shasum": "" }, "require": { @@ -2532,7 +4753,423 @@ "uri", "url" ], - "time": "2019-12-01T08:39:58+00:00" + "time": "2020-01-04T13:00:46+00:00" + }, + { + "name": "symfony/security-bundle", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-bundle.git", + "reference": "9bf16458fee90bd62c240625dd94e335bad91885" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/9bf16458fee90bd62c240625dd94e335bad91885", + "reference": "9bf16458fee90bd62c240625dd94e335bad91885", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "php": "^7.1.3", + "symfony/config": "^4.2|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/security-core": "^4.4", + "symfony/security-csrf": "^4.2|^5.0", + "symfony/security-guard": "^4.2|^5.0", + "symfony/security-http": "^4.4.1" + }, + "conflict": { + "symfony/browser-kit": "<4.2", + "symfony/console": "<3.4", + "symfony/framework-bundle": "<4.4", + "symfony/ldap": "<4.4", + "symfony/twig-bundle": "<4.4" + }, + "require-dev": { + "doctrine/doctrine-bundle": "^1.5|^2.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/browser-kit": "^4.2|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/css-selector": "^3.4|^4.0|^5.0", + "symfony/dom-crawler": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/form": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/serializer": "^4.4|^5.0", + "symfony/translation": "^3.4|^4.0|^5.0", + "symfony/twig-bridge": "^3.4|^4.0|^5.0", + "symfony/twig-bundle": "^4.4|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/twig": "^1.41|^2.10|^3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\SecurityBundle\\": "" + }, + "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": "Symfony SecurityBundle", + "homepage": "https://symfony.com", + "time": "2019-12-16T10:45:21+00:00" + }, + { + "name": "symfony/security-core", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-core.git", + "reference": "52709ee2aafd13d777253d510d96fbf2ccc5a578" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-core/zipball/52709ee2aafd13d777253d510d96fbf2ccc5a578", + "reference": "52709ee2aafd13d777253d510d96fbf2ccc5a578", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1|^2", + "symfony/service-contracts": "^1.1.6|^2" + }, + "conflict": { + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/ldap": "<4.4", + "symfony/security-guard": "<4.3" + }, + "require-dev": { + "psr/container": "^1.0", + "psr/log": "~1.0", + "symfony/event-dispatcher": "^4.3", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/ldap": "^4.4|^5.0", + "symfony/validator": "^3.4.31|^4.3.4|^5.0" + }, + "suggest": { + "psr/container-implementation": "To instantiate the Security class", + "symfony/event-dispatcher": "", + "symfony/expression-language": "For using the expression voter", + "symfony/http-foundation": "", + "symfony/ldap": "For using LDAP integration", + "symfony/validator": "For using the user password constraint" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Core\\": "" + }, + "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": "Symfony Security Component - Core Library", + "homepage": "https://symfony.com", + "time": "2019-12-16T11:07:37+00:00" + }, + { + "name": "symfony/security-csrf", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-csrf.git", + "reference": "aeed1a2315019b5a090f5ad34c01f1935ea9b757" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/aeed1a2315019b5a090f5ad34c01f1935ea9b757", + "reference": "aeed1a2315019b5a090f5ad34c01f1935ea9b757", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/security-core": "^3.4|^4.0|^5.0" + }, + "conflict": { + "symfony/http-foundation": "<3.4" + }, + "require-dev": { + "symfony/http-foundation": "^3.4|^4.0|^5.0" + }, + "suggest": { + "symfony/http-foundation": "For using the class SessionTokenStorage." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Csrf\\": "" + }, + "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": "Symfony Security Component - CSRF Library", + "homepage": "https://symfony.com", + "time": "2019-10-12T00:35:04+00:00" + }, + { + "name": "symfony/security-guard", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-guard.git", + "reference": "203a81f9fcfc3bbaba7f1103c261a30d2648611b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-guard/zipball/203a81f9fcfc3bbaba7f1103c261a30d2648611b", + "reference": "203a81f9fcfc3bbaba7f1103c261a30d2648611b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/security-core": "^3.4.22|^4.2.3|^5.0", + "symfony/security-http": "^4.4.1" + }, + "require-dev": { + "psr/log": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Guard\\": "" + }, + "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": "Symfony Security Component - Guard", + "homepage": "https://symfony.com", + "time": "2019-12-07T16:27:44+00:00" + }, + { + "name": "symfony/security-http", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-http.git", + "reference": "8ab510f214fd9c37769378b5036da58d444fe142" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-http/zipball/8ab510f214fd9c37769378b5036da58d444fe142", + "reference": "8ab510f214fd9c37769378b5036da58d444fe142", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/security-core": "^4.4" + }, + "conflict": { + "symfony/event-dispatcher": ">=5", + "symfony/security-csrf": "<3.4.11|~4.0,<4.0.11" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-csrf": "^3.4.11|^4.0.11|^5.0" + }, + "suggest": { + "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", + "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Http\\": "" + }, + "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": "Symfony Security Component - HTTP Integration", + "homepage": "https://symfony.com", + "time": "2019-12-13T12:11:48+00:00" + }, + { + "name": "symfony/serializer", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/serializer.git", + "reference": "e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/serializer/zipball/e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e", + "reference": "e5bc3f6dee44dc06e7e640cce4baa741b73ecb6e", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "phpdocumentor/type-resolver": "<0.2.1", + "symfony/dependency-injection": "<3.4", + "symfony/property-access": "<3.4", + "symfony/property-info": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.0", + "phpdocumentor/reflection-docblock": "^3.2|^4.0", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4.13|~4.0|^5.0", + "symfony/validator": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader and metadata cache.", + "psr/cache-implementation": "For using the metadata cache.", + "symfony/config": "For using the XML mapping loader.", + "symfony/http-foundation": "For using a MIME type guesser within the DataUriNormalizer.", + "symfony/property-access": "For using the ObjectNormalizer.", + "symfony/property-info": "To deserialize relations.", + "symfony/yaml": "For using the default YAML mapping loader." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Serializer\\": "" + }, + "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": "Symfony Serializer Component", + "homepage": "https://symfony.com", + "time": "2019-12-16T11:07:37+00:00" }, { "name": "symfony/service-contracts", @@ -2593,17 +5230,556 @@ "time": "2019-10-14T12:27:06+00:00" }, { - "name": "symfony/yaml", - "version": "v4.4.1", + "name": "symfony/translation-contracts", + "version": "v1.1.7", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "76de473358fe802578a415d5bb43c296cf09d211" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/76de473358fe802578a415d5bb43c296cf09d211", - "reference": "76de473358fe802578a415d5bb43c296cf09d211", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/364518c132c95642e530d9b2d217acbc2ccac3e6", + "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "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" + ], + "time": "2019-09-17T11:12:18+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "936cf6f5b973377345e8ac43870987ef8e747ce3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/936cf6f5b973377345e8ac43870987ef8e747ce3", + "reference": "936cf6f5b973377345e8ac43870987ef8e747ce3", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^1.41|^2.10|^3.0" + }, + "conflict": { + "symfony/console": "<3.4", + "symfony/form": "<4.4", + "symfony/http-foundation": "<4.3", + "symfony/translation": "<4.2", + "symfony/workflow": "<4.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/console": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/form": "^4.3.5", + "symfony/http-foundation": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "^3.4|^4.0|^5.0", + "symfony/security-acl": "^2.8|^3.0", + "symfony/security-core": "^3.0|^4.0|^5.0", + "symfony/security-csrf": "^3.4|^4.0|^5.0", + "symfony/security-http": "^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.1|^5.0", + "symfony/web-link": "^4.4|^5.0", + "symfony/workflow": "^4.3|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0", + "twig/cssinliner-extra": "^2.12", + "twig/inky-extra": "^2.12", + "twig/markdown-extra": "^2.12" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security-core": "For using the SecurityExtension", + "symfony/security-csrf": "For using the CsrfExtension", + "symfony/security-http": "For using the LogoutUrlExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/web-link": "For using the WebLinkExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "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": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "time": "2019-12-05T05:58:42+00:00" + }, + { + "name": "symfony/twig-bundle", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bundle.git", + "reference": "a6e7bd9731256a55b2270c1283de8bc3bda06e8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/a6e7bd9731256a55b2270c1283de8bc3bda06e8f", + "reference": "a6e7bd9731256a55b2270c1283de8bc3bda06e8f", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/http-foundation": "^4.3|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/polyfill-ctype": "~1.8", + "symfony/twig-bridge": "^4.4|^5.0", + "twig/twig": "^1.41|^2.10|^3.0" + }, + "conflict": { + "symfony/dependency-injection": "<4.1", + "symfony/framework-bundle": "<4.4", + "symfony/translation": "<4.2" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "symfony/asset": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.2.5|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/finder": "^3.4|^4.0|^5.0", + "symfony/form": "^3.4|^4.0|^5.0", + "symfony/framework-bundle": "^4.4|^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/web-link": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bundle\\TwigBundle\\": "" + }, + "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": "Symfony TwigBundle", + "homepage": "https://symfony.com", + "time": "2019-12-10T11:13:11+00:00" + }, + { + "name": "symfony/validator", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "79eb122bed116c1fbe0769698d5b46acce1860a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/79eb122bed116c1fbe0769698d5b46acce1860a2", + "reference": "79eb122bed116c1fbe0769698d5b46acce1860a2", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1|^2" + }, + "conflict": { + "doctrine/lexer": "<1.0.2", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/dependency-injection": "<3.4", + "symfony/http-kernel": "<4.4", + "symfony/intl": "<4.3", + "symfony/translation": ">=5.0", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.7", + "doctrine/cache": "~1.0", + "egulias/email-validator": "^2.1.10", + "symfony/cache": "^3.4|^4.0|^5.0", + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/http-foundation": "^4.1|^5.0", + "symfony/http-kernel": "^4.4", + "symfony/intl": "^4.3|^5.0", + "symfony/property-access": "^3.4|^4.0|^5.0", + "symfony/property-info": "^3.4|^4.0|^5.0", + "symfony/translation": "^4.2", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation mapping. You will also need doctrine/cache.", + "doctrine/cache": "For using the default cached annotation reader.", + "egulias/email-validator": "Strict (RFC compliant) email validation", + "psr/cache-implementation": "For using the mapping cache.", + "symfony/config": "", + "symfony/expression-language": "For using the Expression validator", + "symfony/http-foundation": "", + "symfony/intl": "", + "symfony/property-access": "For accessing properties within comparison constraints", + "symfony/property-info": "To automatically add NotNull and Type constraints", + "symfony/translation": "For translating validation errors.", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "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": "Symfony Validator Component", + "homepage": "https://symfony.com", + "time": "2019-12-17T08:15:02+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/be330f919bdb395d1e0c3f2bfb8948512d6bdd99", + "reference": "be330f919bdb395d1e0c3f2bfb8948512d6bdd99", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" + }, + "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.34|^2.4|^3.0" + }, + "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", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2019-12-18T13:41:29+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "e566070effe60b8d16b99e958cdbd92aa2e470cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/e566070effe60b8d16b99e958cdbd92aa2e470cb", + "reference": "e566070effe60b8d16b99e958cdbd92aa2e470cb", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "symfony/var-dumper": "^4.1.1|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "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": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "time": "2019-12-01T08:39:58+00:00" + }, + { + "name": "symfony/web-link", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/web-link.git", + "reference": "bc6432b92681b2f28ced2f3bbcf051e75eea569c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/web-link/zipball/bc6432b92681b2f28ced2f3bbcf051e75eea569c", + "reference": "bc6432b92681b2f28ced2f3bbcf051e75eea569c", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/link": "^1.0", + "symfony/polyfill-php72": "^1.5" + }, + "conflict": { + "symfony/http-kernel": "<4.3" + }, + "provide": { + "psr/link-implementation": "1.0" + }, + "require-dev": { + "symfony/http-foundation": "^4.4|^5.0", + "symfony/http-kernel": "^4.3|^5.0" + }, + "suggest": { + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\WebLink\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony WebLink Component", + "homepage": "https://symfony.com", + "keywords": [ + "dns-prefetch", + "http", + "http2", + "link", + "performance", + "prefetch", + "preload", + "prerender", + "psr13", + "push" + ], + "time": "2019-10-12T00:35:04+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a08832b974dd5fafe3085a66d41fe4c84bb2628c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a08832b974dd5fafe3085a66d41fe4c84bb2628c", + "reference": "a08832b974dd5fafe3085a66d41fe4c84bb2628c", "shasum": "" }, "require": { @@ -2649,7 +5825,346 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-11-12T14:51:11+00:00" + "time": "2019-12-10T10:33:21+00:00" + }, + { + "name": "thecodingmachine/class-explorer", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/class-explorer.git", + "reference": "743016beaa1d6b9b9d0785f4450540336d3e4eee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/class-explorer/zipball/743016beaa1d6b9b9d0785f4450540336d3e4eee", + "reference": "743016beaa1d6b9b9d0785f4450540336d3e4eee", + "shasum": "" + }, + "require": { + "mouf/classname-mapper": "^1", + "php": ">=7.1", + "psr/simple-cache": "^1" + }, + "require-dev": { + "maglnet/composer-require-checker": "^1.0", + "php-coveralls/php-coveralls": "^2.1", + "phpstan/phpstan": "^0.10.3", + "phpunit/phpunit": "^7.2.7", + "squizlabs/php_codesniffer": "^3.2.3", + "symfony/cache": "^4.1.4", + "thecodingmachine/phpstan-strict-rules": "^0.11.0" + }, + "type": "library", + "extra": { + "class": "TheCodingMachine\\ClassExplorer\\ClassExplorerPlugin", + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "TheCodingMachine\\ClassExplorer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com", + "homepage": "http://mouf-php.com" + } + ], + "description": "Find the list of all your classes and more.", + "homepage": "https://github.com/thecodingmachine/class-explorer", + "keywords": [ + "classes", + "reflection" + ], + "time": "2019-01-31T11:07:30+00:00" + }, + { + "name": "thecodingmachine/graphqlite", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/graphqlite.git", + "reference": "c04dfefc649a9acde9500577c81aca7cfad80da0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/graphqlite/zipball/c04dfefc649a9acde9500577c81aca7cfad80da0", + "reference": "c04dfefc649a9acde9500577c81aca7cfad80da0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.2", + "doctrine/cache": "^1.8", + "ecodev/graphql-upload": "^4.0", + "php": ">=7.1", + "phpdocumentor/reflection-docblock": "^4.3", + "phpdocumentor/type-resolver": "^0.4", + "psr/container": "^1", + "psr/http-message": "^1", + "psr/simple-cache": "^1", + "symfony/lock": "^3 || ^4", + "thecodingmachine/class-explorer": "^1.0.2", + "webonyx/graphql-php": "^0.13" + }, + "require-dev": { + "beberlei/porpaginas": "^1.2", + "mouf/picotainer": "^1.1", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.5.16", + "satooshi/php-coveralls": "^1.0", + "symfony/cache": "^4.1.4" + }, + "suggest": { + "beberlei/porpaginas": "If you want automatic pagination in your GraphQL types" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "TheCodingMachine\\GraphQLite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Négrier", + "email": "d.negrier@thecodingmachine.com" + } + ], + "description": "Write your GraphQL queries in simple to write controllers (using webonyx/graphql-php).", + "time": "2019-10-14T14:40:53+00:00" + }, + { + "name": "twig/twig", + "version": "v2.12.3", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "97b6311585cae66a26833b14b33785f5797f7d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/97b6311585cae66a26833b14b33785f5797f7d39", + "reference": "97b6311585cae66a26833b14b33785f5797f7d39", + "shasum": "" + }, + "require": { + "php": "^7.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.12-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "time": "2019-12-28T07:12:03+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", + "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2019-11-24T13:36:37+00:00" + }, + { + "name": "webonyx/graphql-php", + "version": "v0.13.8", + "source": { + "type": "git", + "url": "https://github.com/webonyx/graphql-php.git", + "reference": "6829ae58f4c59121df1f86915fb9917a2ec595e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/6829ae58f4c59121df1f86915fb9917a2ec595e8", + "reference": "6829ae58f4c59121df1f86915fb9917a2ec595e8", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.1||^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpbench/phpbench": "^0.14.0", + "phpstan/phpstan": "^0.11.4", + "phpstan/phpstan-phpunit": "^0.11.0", + "phpstan/phpstan-strict-rules": "^0.11.0", + "phpunit/phpcov": "^5.0", + "phpunit/phpunit": "^7.2", + "psr/http-message": "^1.0", + "react/promise": "2.*" + }, + "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" + ], + "time": "2019-08-25T10:32:47+00:00" + }, + { + "name": "willdurand/negotiation", + "version": "v2.3.1", + "source": { + "type": "git", + "url": "https://github.com/willdurand/Negotiation.git", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Negotiation\\": "src/Negotiation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "will+git@drnd.me" + } + ], + "description": "Content Negotiation tools for PHP provided as a standalone library.", + "homepage": "http://williamdurand.fr/Negotiation/", + "keywords": [ + "accept", + "content", + "format", + "header", + "negotiation" + ], + "time": "2017-05-14T17:21:12+00:00" } ], "packages-dev": [ @@ -2775,94 +6290,6 @@ ], "time": "2019-10-30T20:03:18+00:00" }, - { - "name": "doctrine/doctrine-bundle", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f96fac225563f5b3b4eeb2f80eb982b7f56484d8", - "reference": "f96fac225563f5b3b4eeb2f80eb982b7f56484d8", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^2.9.0", - "jdorn/sql-formatter": "^1.2.16", - "php": "^7.1", - "symfony/cache": "^4.3.3|^5.0", - "symfony/config": "^4.3.3|^5.0", - "symfony/console": "^3.4.30|^4.3.3|^5.0", - "symfony/dependency-injection": "^4.3.3|^5.0", - "symfony/doctrine-bridge": "^4.3.7|^5.0", - "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0" - }, - "conflict": { - "doctrine/orm": "<2.6", - "twig/twig": "<1.34|>=2.0,<2.4" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "doctrine/orm": "^2.6", - "phpunit/phpunit": "^7.5", - "symfony/phpunit-bridge": "^4.2", - "symfony/property-info": "^4.3.3|^5.0", - "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0", - "symfony/validator": "^3.4.30|^4.3.3|^5.0", - "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0", - "symfony/yaml": "^3.4.30|^4.3.3|^5.0", - "twig/twig": "^1.34|^2.12" - }, - "suggest": { - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "To use the data collector." - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" - } - ], - "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "orm", - "persistence" - ], - "time": "2019-11-28T08:38:10+00:00" - }, { "name": "doctrine/doctrine-fixtures-bundle", "version": "3.3.0", @@ -2930,68 +6357,18 @@ ], "time": "2019-11-13T15:46:58+00:00" }, - { - "name": "jdorn/sql-formatter", - "version": "v1.2.17", - "source": { - "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc", - "reference": "64990d96e0959dff8e059dfcdc1af130728d92bc", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "lib" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "time": "2014-01-12T16:20:24+00:00" - }, { "name": "myclabs/deep-copy", - "version": "1.9.3", + "version": "1.9.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" + "reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", - "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/579bb7356d91f9456ccd505f24ca8b667966a0a7", + "reference": "579bb7356d91f9456ccd505f24ca8b667966a0a7", "shasum": "" }, "require": { @@ -3026,7 +6403,7 @@ "object", "object graph" ], - "time": "2019-08-09T12:45:53+00:00" + "time": "2019-12-15T19:12:40+00:00" }, { "name": "nikic/php-parser", @@ -3182,156 +6559,6 @@ "description": "Library for handling version information and constraints", "time": "2018-07-08T19:19:57+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2018-08-07T13:53:10+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-09-12T14:27:41+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "shasum": "" - }, - "require": { - "php": "^7.1", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" - }, { "name": "phploc/phploc", "version": "4.0.1", @@ -3383,16 +6610,16 @@ }, { "name": "phpmetrics/phpmetrics", - "version": "v2.4.1", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/phpmetrics/PhpMetrics.git", - "reference": "39095017413805cd6d9ada16cfaf8aaffcb2fec4" + "reference": "2456b133664925836d2b807ed6403eb97dddb6c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/39095017413805cd6d9ada16cfaf8aaffcb2fec4", - "reference": "39095017413805cd6d9ada16cfaf8aaffcb2fec4", + "url": "https://api.github.com/repos/phpmetrics/PhpMetrics/zipball/2456b133664925836d2b807ed6403eb97dddb6c4", + "reference": "2456b133664925836d2b807ed6403eb97dddb6c4", "shasum": "" }, "require": { @@ -3406,8 +6633,9 @@ "halleck45/phpmetrics": "*" }, "require-dev": { - "phpunit/phpunit": ">=4.8.27,<=5.7.13", - "sebastian/comparator": ">=1.2.3" + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14", + "sebastian/comparator": ">=1.2.3", + "squizlabs/php_codesniffer": "^3.5" }, "bin": [ "bin/phpmetrics" @@ -3441,37 +6669,37 @@ "quality", "testing" ], - "time": "2018-07-10T17:19:33+00:00" + "time": "2019-12-12T08:55:05+00:00" }, { "name": "phpspec/prophecy", - "version": "1.9.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" + "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", - "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/cbe1df668b3fe136bcc909126a0f529a78d4cbbc", + "reference": "cbe1df668b3fe136bcc909126a0f529a78d4cbbc", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", + "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -3504,7 +6732,7 @@ "spy", "stub" ], - "time": "2019-10-03T11:07:50+00:00" + "time": "2019-12-22T21:05:45+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3760,16 +6988,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.5.17", + "version": "7.5.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a" + "reference": "4263f76a3fc65385e242ef7357b99f3bed36707e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4c92a15296e58191a4cd74cff3b34fc8e374174a", - "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4263f76a3fc65385e242ef7357b99f3bed36707e", + "reference": "4263f76a3fc65385e242ef7357b99f3bed36707e", "shasum": "" }, "require": { @@ -3840,53 +7068,7 @@ "testing", "xunit" ], - "time": "2019-10-28T10:37:36+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" - ], - "time": "2016-08-06T20:24:11+00:00" + "time": "2020-01-06T16:53:05+00:00" }, { "name": "roave/security-advisories", @@ -3894,12 +7076,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e4ee2c8e4ccd908debc64069faf023c684a76760" + "reference": "67ac6ea8f4a078c3c9b7aec5d7ae70f098c37389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e4ee2c8e4ccd908debc64069faf023c684a76760", - "reference": "e4ee2c8e4ccd908debc64069faf023c684a76760", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/67ac6ea8f4a078c3c9b7aec5d7ae70f098c37389", + "reference": "67ac6ea8f4a078c3c9b7aec5d7ae70f098c37389", "shasum": "" }, "conflict": { @@ -3920,7 +7102,7 @@ "composer/composer": "<=1-alpha.11", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/core": ">=2,<3.5.39", - "contao/core-bundle": ">=4,<4.4.39|>=4.5,<4.7.5", + "contao/core-bundle": ">=4,<4.4.46|>=4.5,<4.8.6", "contao/listing-bundle": ">=4,<4.4.8", "datadog/dd-trace": ">=0.30,<0.30.2", "david-garcia/phpwhois": "<=4.3.1", @@ -3934,8 +7116,9 @@ "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.67|>=8,<8.6.16|>=8.7,<8.7.1|>8.7.3,<8.7.5", - "drupal/drupal": ">=7,<7.67|>=8,<8.6.16|>=8.7,<8.7.1|>8.7.3,<8.7.5", + "drupal/core": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", + "drupal/drupal": ">=7,<7.69|>=8,<8.7.11|>=8.8,<8.8.1", + "endroid/qr-code-bundle": "<3.4.2", "erusev/parsedown": "<1.7.2", "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.4", "ezsystems/ezpublish-kernel": ">=5.3,<5.3.12.1|>=5.4,<5.4.13.1|>=6,<6.7.9.1|>=6.8,<6.13.5.1|>=7,<7.2.4.1|>=7.3,<7.3.2.1", @@ -3967,7 +7150,7 @@ "league/commonmark": "<0.18.3", "magento/magento1ce": "<1.9.4.3", "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", "monolog/monolog": ">=1.8,<1.12", "namshi/jose": "<2.2", "onelogin/php-saml": "<2.10.4", @@ -3990,6 +7173,7 @@ "pusher/pusher-php-server": "<2.2.1", "robrichards/xmlseclibs": ">=1,<3.0.4", "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", "shopware/shopware": "<5.3.7", @@ -4049,8 +7233,8 @@ "titon/framework": ">=0,<9.9.99", "truckersmp/phpwhois": "<=4.3.1", "twig/twig": "<1.38|>=2,<2.7", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.27|>=9,<9.5.8", - "typo3/cms-core": ">=8,<8.7.27|>=9,<9.5.8", + "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.30|>=9,<9.5.12|>=10,<10.2.1", + "typo3/cms-core": ">=8,<8.7.30|>=9,<9.5.12|>=10,<10.2.1", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", @@ -4104,7 +7288,7 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2019-12-02T13:03:15+00:00" + "time": "2020-01-06T19:16:46+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4712,904 +7896,72 @@ "time": "2016-10-03T07:35:21+00:00" }, { - "name": "symfony/cache", - "version": "v4.4.1", + "name": "symfony/maker-bundle", + "version": "v1.14.3", "source": { "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96" + "url": "https://github.com/symfony/maker-bundle.git", + "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/de737c81ea95018d11a3ef908ad2ebf203741b96", - "reference": "de737c81ea95018d11a3ef908ad2ebf203741b96", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c864e7f9b8d1e1f5f60acc3beda11299f637aded", + "reference": "c864e7f9b8d1e1f5f60acc3beda11299f637aded", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/cache": "~1.0", - "psr/log": "~1.0", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/service-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.2|^5.0" - }, - "conflict": { - "doctrine/dbal": "<2.5", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" - }, - "provide": { - "psr/cache-implementation": "1.0", - "psr/simple-cache-implementation": "1.0", - "symfony/cache-implementation": "1.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/cache": "~1.6", - "doctrine/dbal": "~2.5", - "predis/predis": "~1.1", - "psr/simple-cache": "^1.0", - "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^3.4|^4.1|^5.0", - "symfony/var-dumper": "^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "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": "Symfony Cache component with PSR-6, PSR-16, and tags", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "time": "2019-12-01T10:50:45+00:00" - }, - { - "name": "symfony/cache-contracts", - "version": "v1.1.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/af50d14ada9e4e82cfabfabdc502d144f89be0a1", - "reference": "af50d14ada9e4e82cfabfabdc502d144f89be0a1", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/cache": "^1.0" - }, - "suggest": { - "symfony/cache-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } - }, - "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 caching", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "time": "2019-10-04T21:43:27+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b8600a1d7d20b0e80906398bb1f50612fa074a8e", - "reference": "b8600a1d7d20b0e80906398bb1f50612fa074a8e", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "ad46a4def1325befab696b49c839dffea3fc92bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/ad46a4def1325befab696b49c839dffea3fc92bd", - "reference": "ad46a4def1325befab696b49c839dffea3fc92bd", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<4.3|>=5.0", - "symfony/finder": "<3.4", - "symfony/proxy-manager-bridge": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0" - }, - "require-dev": { - "symfony/config": "^4.3", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "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": "Symfony DependencyInjection Component", - "homepage": "https://symfony.com", - "time": "2019-12-01T10:19:36+00:00" - }, - { - "name": "symfony/doctrine-bridge", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/31c3d72f9e7a03e1b9d136084a9201c2225ee348", - "reference": "31c3d72f9e7a03e1b9d136084a9201c2225ee348", - "shasum": "" - }, - "require": { - "doctrine/event-manager": "~1.0", - "doctrine/persistence": "~1.0", - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/dependency-injection": "<3.4", - "symfony/form": "<4.4", - "symfony/http-kernel": "<4.3.7", - "symfony/messenger": "<4.3", - "symfony/security-core": "<4.4", - "symfony/validator": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.6", - "doctrine/collections": "~1.0", - "doctrine/data-fixtures": "1.0.*", - "doctrine/dbal": "~2.4", - "doctrine/orm": "^2.6.3", - "doctrine/reflection": "~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/form": "^4.4|^5.0", - "symfony/http-kernel": "^4.3.7", - "symfony/messenger": "^4.4|^5.0", - "symfony/property-access": "^3.4|^4.0|^5.0", - "symfony/property-info": "^3.4|^4.0|^5.0", - "symfony/proxy-manager-bridge": "^3.4|^4.0|^5.0", - "symfony/security-core": "^4.4|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/translation": "^3.4|^4.0|^5.0", - "symfony/validator": "^4.4|^5.0", - "symfony/var-dumper": "^3.4|^4.0|^5.0" - }, - "suggest": { - "doctrine/data-fixtures": "", - "doctrine/dbal": "", - "doctrine/orm": "", - "symfony/form": "", - "symfony/property-info": "", - "symfony/validator": "" - }, - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bridge\\Doctrine\\": "" - }, - "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": "Symfony Doctrine Bridge", - "homepage": "https://symfony.com", - "time": "2019-12-01T08:39:58+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", - "reference": "a1ad02d62789efed1d2b2796f1c15e0c6a00fc3b", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/debug": "^4.4", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony ErrorHandler Component", - "homepage": "https://symfony.com", - "time": "2019-12-01T08:46:01+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b3c3068a72623287550fe20b84a2b01dcba2686f", - "reference": "b3c3068a72623287550fe20b84a2b01dcba2686f", - "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", + "doctrine/inflector": "^1.2", + "nikic/php-parser": "^4.0", + "php": "^7.0.8", "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/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", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2019-11-28T13:33:56+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", - "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "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" - ], - "time": "2019-09-17T09:54:03+00:00" - }, - { - "name": "symfony/framework-bundle", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/framework-bundle.git", - "reference": "69ac426bfaca9270e549cea184eece00357f2675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/69ac426bfaca9270e549cea184eece00357f2675", - "reference": "69ac426bfaca9270e549cea184eece00357f2675", - "shasum": "" - }, - "require": { - "ext-xml": "*", - "php": "^7.1.3", - "symfony/cache": "^4.4|^5.0", - "symfony/config": "^4.3.4|^5.0", - "symfony/dependency-injection": "^4.4.1|^5.0.1", - "symfony/error-handler": "^4.4.1|^5.0.1", "symfony/filesystem": "^3.4|^4.0|^5.0", "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^4.4|^5.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.0", - "phpdocumentor/type-resolver": "<0.2.1", - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/asset": "<3.4", - "symfony/browser-kit": "<4.3", - "symfony/console": "<4.3", - "symfony/dom-crawler": "<4.3", - "symfony/dotenv": "<4.3.6", - "symfony/form": "<4.3.5", - "symfony/http-client": "<4.4", - "symfony/lock": "<4.4", - "symfony/mailer": "<4.4", - "symfony/messenger": "<4.4", - "symfony/mime": "<4.4", - "symfony/property-info": "<3.4", - "symfony/security-bundle": "<4.4", - "symfony/serializer": "<4.4", - "symfony/stopwatch": "<3.4", - "symfony/translation": "<4.4", - "symfony/twig-bridge": "<4.1.1", - "symfony/twig-bundle": "<4.4", - "symfony/validator": "<4.4", - "symfony/web-profiler-bundle": "<4.4", - "symfony/workflow": "<4.3.6" + "symfony/framework-bundle": "^3.4|^4.0|^5.0", + "symfony/http-kernel": "^3.4|^4.0|^5.0" }, "require-dev": { - "doctrine/annotations": "~1.7", - "doctrine/cache": "~1.0", - "paragonie/sodium_compat": "^1.8", - "phpdocumentor/reflection-docblock": "^3.0|^4.0", - "symfony/asset": "^3.4|^4.0|^5.0", - "symfony/browser-kit": "^4.3|^5.0", - "symfony/console": "^4.3.4|^5.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dom-crawler": "^4.3|^5.0", - "symfony/dotenv": "^4.3.6|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/form": "^4.3.5|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/mailer": "^4.4|^5.0", - "symfony/messenger": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0", - "symfony/polyfill-intl-icu": "~1.0", + "doctrine/doctrine-bundle": "^1.8|^2.0", + "doctrine/orm": "^2.3", + "friendsofphp/php-cs-fixer": "^2.8", + "friendsoftwig/twigcs": "^3.1.2", + "symfony/http-client": "^4.3|^5.0", + "symfony/phpunit-bridge": "^4.3|^5.0", "symfony/process": "^3.4|^4.0|^5.0", - "symfony/property-info": "^3.4|^4.0|^5.0", - "symfony/security-csrf": "^3.4|^4.0|^5.0", - "symfony/security-http": "^3.4|^4.0|^5.0", - "symfony/serializer": "^4.4|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/twig-bundle": "^4.4|^5.0", - "symfony/validator": "^4.4|^5.0", - "symfony/web-link": "^4.4|^5.0", - "symfony/workflow": "^4.3.6|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0", - "twig/twig": "^1.41|^2.10|^3.0" - }, - "suggest": { - "ext-apcu": "For best performance of the system caches", - "symfony/console": "For using the console commands", - "symfony/form": "For using forms", - "symfony/property-info": "For using the property_info service", - "symfony/serializer": "For using the serializer service", - "symfony/validator": "For using validation", - "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", - "symfony/yaml": "For using the debug:config and lint:yaml commands" + "symfony/security-core": "^3.4|^4.0|^5.0", + "symfony/yaml": "^3.4|^4.0|^5.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "4.4-dev" + "dev-master": "1.0-dev" } }, "autoload": { "psr-4": { - "Symfony\\Bundle\\FrameworkBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Bundle\\MakerBundle\\": "src/" + } }, "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": "Symfony FrameworkBundle", - "homepage": "https://symfony.com", - "time": "2019-11-28T14:12:27+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e4187780ed26129ee86d5234afbebf085e144f88", - "reference": "e4187780ed26129ee86d5234afbebf085e144f88", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9" - }, - "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.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.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.34|^2.4|^3.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "time": "2019-12-01T14:06:38+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0a89a1dbbedd9fb2cfb2336556dec8305273c19a", - "reference": "0a89a1dbbedd9fb2cfb2336556dec8305273c19a", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" - }, - "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.34|^2.4|^3.0" - }, - "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", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", + "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", + "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", "keywords": [ - "debug", - "dump" + "code generator", + "generator", + "scaffold", + "scaffolding" ], - "time": "2019-11-28T13:33:56+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v4.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "e566070effe60b8d16b99e958cdbd92aa2e470cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/e566070effe60b8d16b99e958cdbd92aa2e470cb", - "reference": "e566070effe60b8d16b99e958cdbd92aa2e470cb", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "require-dev": { - "symfony/var-dumper": "^4.1.1|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4-dev" - } - }, - "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": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "serialize" - ], - "time": "2019-12-01T08:39:58+00:00" + "time": "2019-11-07T00:56:03+00:00" }, { "name": "theseer/fdomdocument", @@ -5690,54 +8042,6 @@ ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "time": "2019-06-13T22:48:21+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", - "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "vimeo/psalm": "<3.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2019-11-24T13:36:37+00:00" } ], "aliases": [], @@ -5748,7 +8052,9 @@ }, "prefer-stable": true, "prefer-lowest": false, - "platform": [], + "platform": { + "ext-json": "*" + }, "platform-dev": [], "platform-overrides": { "php": "7.2.0" diff --git a/config/bootstrap.php b/config/bootstrap.php new file mode 100644 index 000000000..352cfebc3 --- /dev/null +++ b/config/bootstrap.php @@ -0,0 +1,24 @@ +=1.2) +if (is_array($env = @include dirname(__DIR__) . '/.env.local.php') && ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? $env['APP_ENV']) === $env['APP_ENV']) { + foreach ($env as $k => $v) { + $_ENV[$k] = $_ENV[$k] ?? (isset($_SERVER[$k]) && 0 !== strpos($k, 'HTTP_') ? $_SERVER[$k] : $v); + } +} elseif (!class_exists(Dotenv::class)) { + throw new RuntimeException('Please run "composer require symfony/dotenv" to load the ".env" files configuring the application.'); +} else { + // load all the .env files + (new Dotenv(false))->loadEnv(dirname(__DIR__) . '/.env'); +} + +$_SERVER += $_ENV; +$_SERVER['APP_ENV'] = $_ENV['APP_ENV'] = ($_SERVER['APP_ENV'] ?? $_ENV['APP_ENV'] ?? null) ?: 'dev'; +$_SERVER['APP_DEBUG'] = $_SERVER['APP_DEBUG'] ?? $_ENV['APP_DEBUG'] ?? 'prod' !== $_SERVER['APP_ENV']; +$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = (int)$_SERVER['APP_DEBUG'] || filter_var($_SERVER['APP_DEBUG'], + FILTER_VALIDATE_BOOLEAN) ? '1' : '0'; diff --git a/config/bundles.php b/config/bundles.php new file mode 100644 index 000000000..0b065713b --- /dev/null +++ b/config/bundles.php @@ -0,0 +1,12 @@ + ['all' => true], + Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], + Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], + Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], + ApiPlatform\Core\Bridge\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true], + DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], + Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], + Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], +]; diff --git a/config/packages/api_platform.yaml b/config/packages/api_platform.yaml new file mode 100644 index 000000000..c0df5e682 --- /dev/null +++ b/config/packages/api_platform.yaml @@ -0,0 +1,39 @@ +api_platform: + graphql: + graphiql: + enabled: false + graphql_playground: + enabled: false + mapping: + paths: ['%kernel.project_dir%/core'] + patch_formats: + json: ['application/merge-patch+json'] + graphql: ['application/graphql'] + swagger: + versions: [3] + oauth: + # To enable or disable oauth. + enabled: true + + # The oauth client id. + clientId: 'scrmfe' + + # The oauth client secret. + clientSecret: 'scrmfe' + + # The oauth type. + type: 'oauth2' + + # The oauth flow grant type. + flow: 'password' + + # The oauth token url. + tokenUrl: '/oauth/v2/token' + + # The oauth authentication url. + authorizationUrl: '/oauth/v2/auth' + + # The oauth scopes. + scopes: [] + + enable_swagger_ui: false diff --git a/config/packages/cache.yaml b/config/packages/cache.yaml new file mode 100644 index 000000000..6899b7200 --- /dev/null +++ b/config/packages/cache.yaml @@ -0,0 +1,19 @@ +framework: + cache: + # Unique name of your app: used to compute stable namespaces for cache keys. + #prefix_seed: your_vendor_name/app_name + + # The "app" cache stores to the filesystem by default. + # The data in this cache should persist between deploys. + # Other options include: + + # Redis + #app: cache.adapter.redis + #default_redis_provider: redis://localhost + + # APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues) + #app: cache.adapter.apcu + + # Namespaced pools use the above "app" backend by default + #pools: + #my.dedicated.cache: null diff --git a/config/packages/dev/monolog.yaml b/config/packages/dev/monolog.yaml new file mode 100644 index 000000000..b1998da1a --- /dev/null +++ b/config/packages/dev/monolog.yaml @@ -0,0 +1,19 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + # uncomment to get logging in your browser + # you may have to allow bigger header sizes in your Web server configuration + #firephp: + # type: firephp + # level: info + #chromephp: + # type: chromephp + # level: info + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml new file mode 100644 index 000000000..ddc2fb266 --- /dev/null +++ b/config/packages/doctrine.yaml @@ -0,0 +1,18 @@ +doctrine: + dbal: + url: '%env(resolve:DATABASE_URL)%' + + # IMPORTANT: You MUST configure your server version, + # either here or in the DATABASE_URL env var (see .env file) + #server_version: '5.7' + orm: + auto_generate_proxy_classes: true + naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware + auto_mapping: true + mappings: + App: + is_bundle: false + type: annotation + dir: '%kernel.project_dir%/core/modules' + prefix: 'SuiteCRM\Core\Modules\' + alias: App diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml new file mode 100644 index 000000000..6089f4bd0 --- /dev/null +++ b/config/packages/framework.yaml @@ -0,0 +1,16 @@ +framework: + secret: '%env(APP_SECRET)%' + #csrf_protection: true + #http_method_override: true + + # Enables session support. Note that the session will ONLY be started if you read or write from it. + # Remove or comment this section to explicitly disable session support. + session: + handler_id: null + cookie_secure: auto + cookie_samesite: lax + + #esi: true + #fragments: true + php_errors: + log: true diff --git a/config/packages/prod/doctrine.yaml b/config/packages/prod/doctrine.yaml new file mode 100644 index 000000000..084f59a05 --- /dev/null +++ b/config/packages/prod/doctrine.yaml @@ -0,0 +1,20 @@ +doctrine: + orm: + auto_generate_proxy_classes: false + metadata_cache_driver: + type: pool + pool: doctrine.system_cache_pool + query_cache_driver: + type: pool + pool: doctrine.system_cache_pool + result_cache_driver: + type: pool + pool: doctrine.result_cache_pool + +framework: + cache: + pools: + doctrine.result_cache_pool: + adapter: cache.app + doctrine.system_cache_pool: + adapter: cache.system diff --git a/config/packages/prod/monolog.yaml b/config/packages/prod/monolog.yaml new file mode 100644 index 000000000..5bcdf06ea --- /dev/null +++ b/config/packages/prod/monolog.yaml @@ -0,0 +1,23 @@ +monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log" + deprecation_filter: + type: filter + handler: deprecation + max_level: info + channels: ["php"] diff --git a/config/packages/prod/routing.yaml b/config/packages/prod/routing.yaml new file mode 100644 index 000000000..b3e6a0af2 --- /dev/null +++ b/config/packages/prod/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + strict_requirements: null diff --git a/config/packages/routing.yaml b/config/packages/routing.yaml new file mode 100644 index 000000000..7e977620b --- /dev/null +++ b/config/packages/routing.yaml @@ -0,0 +1,3 @@ +framework: + router: + utf8: true diff --git a/config/packages/security.yaml b/config/packages/security.yaml new file mode 100644 index 000000000..ce69ba752 --- /dev/null +++ b/config/packages/security.yaml @@ -0,0 +1,22 @@ +security: + # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers + providers: + in_memory: { memory: null } + firewalls: + dev: + pattern: ^/(_(profiler|wdt)|css|images|js)/ + security: false + main: + anonymous: lazy + + # activate different ways to authenticate + # https://symfony.com/doc/current/security.html#firewalls-authentication + + # https://symfony.com/doc/current/security/impersonating_user.html + # switch_user: true + + # Easy way to control access for large sections of your site + # Note: Only the *first* access control that matches will be used + access_control: + # - { path: ^/admin, roles: ROLE_ADMIN } + # - { path: ^/profile, roles: ROLE_USER } diff --git a/config/packages/test/dama_doctrine_test_bundle.yaml b/config/packages/test/dama_doctrine_test_bundle.yaml new file mode 100644 index 000000000..80b009117 --- /dev/null +++ b/config/packages/test/dama_doctrine_test_bundle.yaml @@ -0,0 +1,4 @@ +dama_doctrine_test: + enable_static_connection: true + enable_static_meta_data_cache: true + enable_static_query_cache: true diff --git a/config/packages/test/framework.yaml b/config/packages/test/framework.yaml new file mode 100644 index 000000000..d051c8400 --- /dev/null +++ b/config/packages/test/framework.yaml @@ -0,0 +1,4 @@ +framework: + test: true + session: + storage_id: session.storage.mock_file diff --git a/config/packages/test/monolog.yaml b/config/packages/test/monolog.yaml new file mode 100644 index 000000000..2762653c8 --- /dev/null +++ b/config/packages/test/monolog.yaml @@ -0,0 +1,7 @@ +monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] diff --git a/config/packages/test/twig.yaml b/config/packages/test/twig.yaml new file mode 100644 index 000000000..8c6e0b401 --- /dev/null +++ b/config/packages/test/twig.yaml @@ -0,0 +1,2 @@ +twig: + strict_variables: true diff --git a/config/packages/test/validator.yaml b/config/packages/test/validator.yaml new file mode 100644 index 000000000..1e5ab7880 --- /dev/null +++ b/config/packages/test/validator.yaml @@ -0,0 +1,3 @@ +framework: + validation: + not_compromised_password: false diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml new file mode 100644 index 000000000..b3cdf3064 --- /dev/null +++ b/config/packages/twig.yaml @@ -0,0 +1,2 @@ +twig: + default_path: '%kernel.project_dir%/templates' diff --git a/config/packages/validator.yaml b/config/packages/validator.yaml new file mode 100644 index 000000000..350786a13 --- /dev/null +++ b/config/packages/validator.yaml @@ -0,0 +1,8 @@ +framework: + validation: + email_validation_mode: html5 + + # Enables validator auto-mapping support. + # For instance, basic validation constraints will be inferred from Doctrine's metadata. + #auto_mapping: + # App\Entity\: [] diff --git a/config/routes/api_platform.yaml b/config/routes/api_platform.yaml new file mode 100644 index 000000000..38f11cba8 --- /dev/null +++ b/config/routes/api_platform.yaml @@ -0,0 +1,4 @@ +api_platform: + resource: . + type: api_platform + prefix: /api diff --git a/config/routes/dev/framework.yaml b/config/routes/dev/framework.yaml new file mode 100644 index 000000000..bcbbf13d0 --- /dev/null +++ b/config/routes/dev/framework.yaml @@ -0,0 +1,3 @@ +_errors: + resource: '@FrameworkBundle/Resources/config/routing/errors.xml' + prefix: /_error diff --git a/config/services.yaml b/config/services.yaml new file mode 100644 index 000000000..ce5e5825f --- /dev/null +++ b/config/services.yaml @@ -0,0 +1,28 @@ +framework: + secret: "%secret%" + +parameters: + secret: ThisTokenIsNotSoSecretChangeIt + +services: + # default configuration for services in *this* file + _defaults: + autowire: true # Automatically injects dependencies in your services. + autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. + bind: + $projectDir: '%kernel.project_dir%' + + # makes classes in src/ available to be used as services + # this creates a service per class whose id is the fully-qualified class name + App\: + resource: '../core/src/*' + exclude: '../core/src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}' + + # controllers are imported separately to make sure services can be injected + # as action arguments even if you don't extend any base controller class + SuiteCRM\Core\Modules\: + resource: '../core/modules/' + tags: ['controller.service_arguments'] + + # add more service definitions when explicit configuration is needed + # please note that last definitions always *replace* previous ones diff --git a/core/base/Cli/CommandMapper.php b/core/base/Cli/CommandMapper.php deleted file mode 100644 index 282c1b905..000000000 --- a/core/base/Cli/CommandMapper.php +++ /dev/null @@ -1,106 +0,0 @@ -fileHelper = $file; - - try { - $this->configParameters = $config->loadFiles($config_path); - } catch (\Exception $e) { - trigger_error('Config failed to load files: ' . $e); - } - - $this->enabledModules = $this->configParameters->get('modules.enabled'); - } - - public function getAllModules(): void - { - $modules = (new ModuleManager($this->configParameters, $this->fileHelper))->getAllModules(); - - $this->enabledModules = $modules; - } - - /** - * @return array - */ - public function getAllCommands(): array - { - $commandClasses = []; - - $filePaths = []; - - if (empty($this->enabledModules)) { - $this->getAllModules(); - } - - if (!empty($this->enabledModules)) { - foreach ($this->enabledModules as $module) { - $filePaths[] = APP_PATH . '/' . $module . '/Cli'; - } - } - - $files = $this->fileHelper->findFiles($filePaths, '/Command.php$/'); - - if (!empty($files)) { - foreach ($files as $file) { - $parts = explode('/', $file); - - $key = array_search('modules', $parts, true); - - $parts = array_splice($parts, ($key + 1), count($parts)); - - $filename = end($parts); - $classname = rtrim($filename, '.php'); - - $keys = array_keys($parts); - $key = end($keys); - - $parts[$key] = $classname; - - $commandClass = 'SuiteCRM\\Core\\Modules\\' . implode('\\', $parts); - - $commandClasses[] = new $commandClass($this->configParameters); - } - } - - return $commandClasses; - } - -} diff --git a/core/base/Cli/SuiteCommand.php b/core/base/Cli/SuiteCommand.php deleted file mode 100644 index 37c210f9e..000000000 --- a/core/base/Cli/SuiteCommand.php +++ /dev/null @@ -1,19 +0,0 @@ -locate($path); - } - - $loaderResolver = new LoaderResolver([new YamlLoader($fileLocator)]); - - $delegatingLoader = new DelegatingLoader($loaderResolver); - - // All config parameters - $allParameters = []; - - if ($configPaths !== false) { - foreach ($configPaths as $path) { - // Load the parameters from the path resource - $parameters = $delegatingLoader->load($path); - - // Merge parameters together - if (!empty($parameters)) { - $allParameters = array_merge($allParameters, $parameters); - } - } - } - - return new ParameterCollection($allParameters); - } -} - diff --git a/core/base/Config/ParameterCollection.php b/core/base/Config/ParameterCollection.php deleted file mode 100644 index ae70c0e03..000000000 --- a/core/base/Config/ParameterCollection.php +++ /dev/null @@ -1,13 +0,0 @@ -load($data); - } - - /** - * Recursive function to collect the collection data - * - * @param array $data The collection data - * @param string $parent_key The parent keys attached to the child array - * @return bool - */ - public function load($data, $parent_key = ''): bool - { - if (empty($data)) { - return false; - } - - $parentKey = ($parent_key !== '') ? $parent_key . '.' : ''; - - foreach ($data as $key => $val) { - if (is_array($val)) { - $this->load($data[$key], $parentKey . $key); - } - - $this->data[$parentKey . $key] = $val; - } - - return true; - } - - /** - * Get all config variable - * - * @return array - */ - public function getAll(): array - { - return $this->data; - } - - /** - * Get collection data - * - * @param string $key - * @return bool|mixed - */ - public function get($key) - { - return ($this->has($key)) ? $this->data[$key] : false; - } - - /** - * Set collection data - * - * @param string $key Name of parameter to set - * @param mixed $value Value to set - */ - public function set($key, $value): void - { - $this->data[$key] = $value; - } - - /** - * Find out if parameter exists - * - * @param string $key Name to find out - * @return bool - */ - public function has($key): bool - { - return isset($this->data[$key]); - } - - /** - * Count collection entry for key - * - * @param string|null $key The config key you want to count - * @return int - */ - public function count($key = null): int - { - return ($key === null) ? count($this->data) : count($this->data[$key]); - } - - /** - * Check if the collection key is empty - * - * @param string $key - * @return bool true if empty - false - if not - */ - public function isEmpty($key): bool - { - $has = $this->has($key); - - if ($has) { - $count = $this->count($key); - - if ($count > 0) { - return false; - } - } - - return true; - } -} diff --git a/core/base/Helper/Data/CollectionInterface.php b/core/base/Helper/Data/CollectionInterface.php deleted file mode 100644 index f9740f35d..000000000 --- a/core/base/Helper/Data/CollectionInterface.php +++ /dev/null @@ -1,50 +0,0 @@ -isDot()) { - continue; - } - - if ($fileInfo->isDir()) { - $directories[] = $fileInfo->getFilename(); - } - } - } - - asort($directories); - - return array_values($directories); - } - - /** - * Make directory - * - * @param string $path - * @param int $permissions octal - * @return bool - */ - public function makeDir($path, $permissions = 0755): bool - { - return is_dir($path) || mkdir($path, $permissions, true) || is_dir($path); - } - - /** - * Delete a directory and all files - * - * @param string $dir The directory path you want to delete - * @param array $files_to_leave - * @return bool True - successfully deleted False - issue with deletion - */ - public function deleteDirectory(string $dir, array $files_to_leave = []): bool - { - $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); - - $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); - - if (empty($files_to_leave)) { - foreach ($ri as $file) { - $file->isDir() ? rmdir($file) : unlink($file); - } - } else { - foreach ($ri as $file) { - if (strpos($file->getPathName(), $files_to_leave[0]) === false) { - $file->isDir() ? rmdir($file) : unlink($file); - } - } - } - - return (!$this->isDirectoryEmpty($dir)) ?: rmdir($dir); - } - - /** - * Check to see if directory is empty - * - * @param string $dir - * @return bool - */ - public function isDirectoryEmpty($dir): bool - { - if (!is_readable($dir)) { - return null; - } - - return (count(scandir($dir)) == 2); - } - - /** - * File files - * - * @param string|array $directories The directory to look in - * @param string $search The pattern to find the files - * @return array - */ - public function findFiles($directories, $search): array - { - $foundFiles = []; - - // Convert to array if string given - if (is_string($directories)) { - $directories = [$directories]; - } - - foreach ($directories as $directory) { - $directory = realpath($directory); - - if (!is_dir($directory)) { - continue; - } - - $objDirectory = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS); - - $iterator = new RecursiveIteratorIterator($objDirectory); - - $files = new \RegexIterator($iterator, $search, \RecursiveRegexIterator::GET_MATCH); - - if ($files !== null) { - foreach ($files as $key => $value) { - $foundFiles[] = $key; - } - } - } - - return $foundFiles; - } - - /** - * Copy files recursively - * @param $src - * @param $dst - */ - public function recurseCopy($src, $dst): void - { - $dir = \opendir($src); - - if (!is_dir($dst)) { - try { - if (!mkdir($dst, 0755, true) && !is_dir($dst)) { - throw new \RuntimeException(sprintf('Directory "%s" was not created', $dst)); - } - } catch (\Exception $e) { - throw new \RuntimeException($e->getMessage()); - } - } - - chmod($dst, 0755); - - while (false !== ($file = \readdir($dir))) { - if (($file !== '.') && ($file !== '..')) { - if (\is_dir($src . '/' . $file)) { - $this->recurseCopy($src . '/' . $file, $dst . '/' . $file); - } else { - \copy($src . '/' . $file, $dst . '/' . $file); - } - } - } - - \closedir($dir); - } -} diff --git a/core/base/Helper/File/FileMapperInterface.php b/core/base/Helper/File/FileMapperInterface.php deleted file mode 100644 index 144badf2d..000000000 --- a/core/base/Helper/File/FileMapperInterface.php +++ /dev/null @@ -1,18 +0,0 @@ -modules = $modules; - $this->config = $config; - $this->route = $route; - } - - /** - * Run the Application - * - * @return mixed - */ - public function run() - { - return $this; - } - - /** - * Get all routes from enabled modules - * - * @return array - */ - public function getAllRoutes(): ?array - { - $allRoutes = []; - - foreach ($this->modules as $module) { - $allRoutes = array_merge($allRoutes, $module); - } - - return $allRoutes; - } - - /** - * Get the route of the instance call - * - * @return mixed - * @throws \Exception - */ - public function getRoute() - { - if ($this->route === null) { - throw new \RuntimeException('Route was not configured'); - } - - return $this->route; - } - - /** - * Get all services - * - * @return array - */ - public function getAllServices(): array - { - $allServices = []; - - foreach ($this->modules as $module) { - $allServices = array_merge($allServices, $module); - } - - return $allServices; - } - -} diff --git a/core/base/Module/Controller.php b/core/base/Module/Controller.php deleted file mode 100644 index 21bc961cf..000000000 --- a/core/base/Module/Controller.php +++ /dev/null @@ -1,294 +0,0 @@ -config = $config; - $this->requestObj = $request; - $this->responseObj = $response; - $this->view = $view; - $this->services = $services; - - if ($this->config->has('storage.mysql.driver')) { - $connectionParams = $this->config->get('storage.mysql'); - $namespaces = $this->config->get('entity.namespaces'); - - $realNamespaces = []; - - foreach ($namespaces as $path => $namespace) { - $realPath = realpath($path); - if ($realPath !== false) { - $realNamespaces[$realPath] = $namespace; - } - } - - $driver = new SimplifiedYamlDriver($realNamespaces); - - - $realNamespaces = []; - - foreach ($namespaces as $path => $namespace) { - $realPath = realpath($path); - if ($realPath !== false) { - $realNamespaces[$realPath] = $namespace; - } - } - - $driver = new SimplifiedYamlDriver($realNamespaces); - - $isDevMode = false; - - if ($this->config->has('server.environment') && $this->config->get('server.environment') === 'develop') { - $isDevMode = true; - } - - $config = Setup::createYAMLMetadataConfiguration( - (array)$namespaces, - $isDevMode - ); - - $cache = new ArrayCache(); - - $config->setMetadataCacheImpl($cache); - $config->setQueryCacheImpl($cache); - $config->setMetadataDriverImpl($driver); - - // Table Prefix - $evm = new EventManager(); - $tablePrefix = new TablePrefix('suite8_'); - $evm->addEventListener(Events::loadClassMetadata, $tablePrefix); - - try { - $entityManager = EntityManager::create($connectionParams, $config, $evm); - } catch (ORMException $e) { - trigger_error('Failed to get create entity manager instance: ' . $e); - } - - //-- This I had to add to support the Mysql enum type. - try { - $platform = $entityManager->getConnection()->getDatabasePlatform(); - } catch (DBALException $e) { - trigger_error('Failed to get DB platform: ' . $e); - } - - try { - $platform->registerDoctrineTypeMapping('enum', 'string'); - } catch (DBALException $e) { - trigger_error('Failed to get register doctrine type mapping: ' . $e); - } - - $this->em = $entityManager; - } - } - - /** - * Get a storage class - * - * @param $namespace - * @return object - */ - public function getStorage($namespace) - { - [$module, $entityName] = explode('.', $namespace); - - return $this->em->getRepository( - 'SuiteCRM\Core\Modules\\' . ucfirst($module) . '\Entity\\' . ucfirst($entityName) - ); - } - - /** - * Get a service class - * - * @param $serviceName - * @return object - * @throws Exception - */ - public function getService($serviceName) - { - if (!$this->services->has($serviceName)) { - throw new \RuntimeException('No Service Found: ' . $serviceName); - } - - return $this->services->get($serviceName); - } - - /** - * Quick function to allow for $this->render - * - * @param $view - * @param array $params - * @param string $template - * @return string - */ - public function render($view, $params = [], $template = 'default.html.php'): string - { - return $this->view->render($view, $params, $template); - } - - /** - * Redirect to URL - * - * @param mixed $url Array or string - * @param mixed $params Params too be sent - * @param int $statusCode - * @todo Get Base URL, Concat the Base URL with Route (Controller, Action), Test Array and String - * - */ - public function redirect($url, $params = [], $statusCode = 303): void - { - $this->session->set('redirectPost', $params); - - if (is_array($url)) { - $url = implode('/', $url); - } - - $urlHelper = new Url(); - - header('Location: ' . $urlHelper->baseUrl() . $url, true, $statusCode); - die(); - } - - /** - * Redirect to URL - * - * @param mixed $url URL to redirect to - * @param int $statusCode Forces the HTTP response code to the specified value. Note that this parameter only has an effect if the header is not empty. - */ - public function redirectToUrl($url, $statusCode = 303): void - { - header('Location: ' . $url, true, $statusCode); - die(); - } - - /** - * Create a flash message. - * - * @param string $message Flash Message - * @param string $type Type of Message - * @return void - * @todo create one time session var for flash_msg, - * - */ - public function flashMsg($message, $type = 'default'): void - { - $this->session->set('flashMsg', ['message' => $message, 'type' => $type], 1); - } - - /** - * @param $template - * @param $params - */ - public function renderTemplate($template, $params): void - { - $response = [ - 'template' => ' -
- -
- ', - 'scripts' => [ - 'https://code.jquery.com/jquery-3.4.1.min.js' - ] - ]; - - header('Content-Type: application/json'); - - echo json_encode($response); - } -} diff --git a/core/base/Module/Manager.php b/core/base/Module/Manager.php deleted file mode 100644 index 2ab36b565..000000000 --- a/core/base/Module/Manager.php +++ /dev/null @@ -1,134 +0,0 @@ -config = $config; - $this->fileHelper = $file_helper; - } - - /** - * Get Module Paths - * - * @return array - */ - public function getModulePaths(): array - { - // Get config module paths if set - - if (!$this->config->isEmpty('modules.paths')) { - $modulePaths = []; - $configModulePaths = $this->config->get('modules.paths'); - - foreach ($configModulePaths as $modulePath) { - $modulePaths[] = realpath(__DIR__ . $modulePath); - } - - return $modulePaths; - } - - // Return default module paths - return [ - realpath(BASE_PATH . '/core/modules') - ]; - } - - /** - * Get an array of all modules - * - * @return array - */ - public function getAllModules(): array - { - $modulePaths = $this->getModulePaths(); - - return (new ModuleMapper($modulePaths, $this->fileHelper, $this->config))->getAllModuleFolders(); - } - - /** - * Get a list of the enabled modules - * - * @return array - */ - public function listEnabled(): array - { - $modulePaths = $this->getModulePaths(); - $moduleMapper = new ModuleMapper($modulePaths, $this->fileHelper, $this->config); - $modules = []; - - if ($this->config->has('modules.enabled')) { - $foundModules = []; - - $enabledModules = $this->config->get('modules.enabled'); - $modules = $moduleMapper->checkModulesExist($enabledModules); - - return $moduleMapper->getModuleClassesFromFileName($modules); - } - - $moduleNames = $this->getAllModules(); - $modules = $moduleMapper->checkModulesExist($moduleNames); - - return $moduleMapper->getModuleClassesFromFileName($modules); - } - - /** - * Get Module Services - * - * @return array - */ - public function getModuleServices(): ?array - { - $modules = $this->getEnabled(); - - $moduleServices = []; - - foreach ($modules as $module) { - $moduleServices[] = $module->getServices; - } - } - - /** - * Get Module Command - * - * @return array - */ - public function getModuleCommands(): ?array - { - $modules = $this->getEnabled(); - - $moduleCommands = []; - - foreach ($modules as $module) { - //$moduleCommands - } - } -} diff --git a/core/base/Module/ModuleCollection.php b/core/base/Module/ModuleCollection.php deleted file mode 100644 index efcd32c4c..000000000 --- a/core/base/Module/ModuleCollection.php +++ /dev/null @@ -1,22 +0,0 @@ -filePaths = $file_paths; - $this->fileHelper = $file; - $this->moduleConfigParameters = $module_config_params; - $this->enabledModules = $this->moduleConfigParameters->get('modules.enabled'); - } - - - /** - * Get All Module Folders - * - * @return array - */ - public function getAllModuleFolders(): array - { - return $this->fileHelper->findDirectories($this->filePaths); - } - - - /** - * Check modules exist out of an array input modules - * - * @param array $modules array of module names to check - * @return array List if found modules - */ - public function checkModulesExist($modules): array - { - $foundModules = []; - - if (!empty($modules)) { - foreach ($modules as $module) { - foreach ($this->filePaths as $path) { - if (file_exists($path . '/' . $module . '/' . $module . '.php')) { - $foundModules[] = $path . '/' . $module . '/' . $module . '.php'; - } - } - } - } - - return $foundModules; - } - - /** - * Get all module classes from file name - * - * @param $files - * @return array|bool - */ - public function getModuleClassesFromFileName($files) - { - if (empty($files)) { - return false; - } - - $moduleClasses = []; - - foreach ($files as $file) { - $file = str_replace('suitecrm/', '', $file); - $parts = explode('/', $file); - $parts = array_splice($parts, 4, count($parts)); - - $filename = end($parts); - $classname = rtrim($filename, '.php'); - - $keys = array_keys($parts); - $key = end($keys); - - $parts[$key] = $classname; - - $parts = array_map('ucfirst', $parts); - - $commandClass = 'SuiteCRM\\' . implode('\\', $parts); - - $moduleClasses[] = new $commandClass(); - } - - return $moduleClasses; - } - -} diff --git a/core/base/Module/Service/Manager.php b/core/base/Module/Service/Manager.php deleted file mode 100644 index 773a9f2f8..000000000 --- a/core/base/Module/Service/Manager.php +++ /dev/null @@ -1,34 +0,0 @@ -listEnabled() as $module) { - $file = new FileLocator(); - - $service = new $module(); - } - - return (new ServiceCollection())->load(); - } - - -} diff --git a/core/base/Module/Service/ServiceCollection.php b/core/base/Module/Service/ServiceCollection.php deleted file mode 100644 index 43360832b..000000000 --- a/core/base/Module/Service/ServiceCollection.php +++ /dev/null @@ -1,22 +0,0 @@ -fileHelper = $file; - $this->moduleManager = $moduleManager; - $this->config = $config; - } - - /** - * Get all services enabled in the system - * - * @return ServiceCollection - */ - public function getAllServices(): ServiceCollection - { - $serviceClasses = []; - - $filePaths = []; - - $enabledModules = $this->moduleManager->getAllModules(); - - // Get Application Service - if (!empty($enabledModules)) { - foreach ($enabledModules as $module) { - $path = APP_PATH . 'Modules/' . $module . '/Service'; - if (file_exists($path)) { - $filePaths[] = $path; - } - } - } - - $files = $this->fileHelper->findFiles($filePaths, '/Service.php$/'); - - if (!empty($files)) { - foreach ($files as $file) { - $parts = explode('/', $file); - - $key = array_search('Modules', $parts, true); - - $parts = array_splice($parts, $key, count($parts)); - - $filename = end($parts); - $classname = rtrim($filename, '.php'); - - $keys = array_keys($parts); - $key = end($keys); - - $parts[$key] = $classname; - - $serviceClass = 'SuiteCRM\\App\\' . implode('\\', $parts); - - $service = new $serviceClass(); - $serviceName = $service->getName(); - - $serviceClasses[$serviceName] = $service->createService(); - } - } - - // Load in configuration services if they're available - if ($this->config->has('services')) { - foreach ($this->config->get('services') as $serviceName => $serviceFactory) { - $serviceFactory = new $serviceFactory(); - $service = $serviceFactory->createService(); - $serviceClasses[$serviceName] = $service; - } - } - - return new ServiceCollection($serviceClasses); - } -} diff --git a/core/base/Module/Storage/DataCollectionManager.php b/core/base/Module/Storage/DataCollectionManager.php deleted file mode 100644 index eaea1c2d4..000000000 --- a/core/base/Module/Storage/DataCollectionManager.php +++ /dev/null @@ -1,58 +0,0 @@ -dataProviders = $dataProviders; - } - - /** - * Get the Collection Object - * - * @param string $resourceClass - * @param string $operationName - * @param array $context - * @return array - */ - public function getCollection(string $resourceClass, string $operationName = null, array $context = []): array - { - foreach ($this->dataProviders as $dataProvider) { - try { - if ($dataProvider instanceof RestrictedDataProviderInterface - && !$dataProvider->supports($resourceClass, $operationName, $context)) { - continue; - } - - return $dataProvider->getCollection($resourceClass, $operationName, $context); - } catch (ResourceClassNotSupportedException $e) { - @trigger_error( - sprintf( - 'Throwing a "%s" in a data provider is deprecated in favor of implementing "%s"', - ResourceClassNotSupportedException::class, - RestrictedDataProviderInterface::class - ), - E_USER_DEPRECATED - ); - } - } - - return []; - } -} diff --git a/core/base/Module/Storage/DoctrineCommands.php b/core/base/Module/Storage/DoctrineCommands.php deleted file mode 100644 index 0041dd713..000000000 --- a/core/base/Module/Storage/DoctrineCommands.php +++ /dev/null @@ -1,37 +0,0 @@ -getApplication()->getKernel()->getContainer()->get('doctrine'); - - $em = $doctrine->getEntityManager(); - $db = $em->getConnection(); - - $helperSet = $this->getHelperSet(); - $helperSet->set(new ConnectionHelper($db), 'db'); - $helperSet->set(new EntityManagerHelper($em), 'em'); - - parent::execute($input, $output); - } - -} diff --git a/core/base/Module/Storage/Manager.php b/core/base/Module/Storage/Manager.php deleted file mode 100644 index 435e1d816..000000000 --- a/core/base/Module/Storage/Manager.php +++ /dev/null @@ -1,25 +0,0 @@ -addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePrefix); - - $em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config, $evm); - - parent::__construct(); - } -} \ No newline at end of file diff --git a/core/base/Module/Storage/TablePrefix.php b/core/base/Module/Storage/TablePrefix.php deleted file mode 100644 index 864b5d2ff..000000000 --- a/core/base/Module/Storage/TablePrefix.php +++ /dev/null @@ -1,49 +0,0 @@ -prefix = (string)$prefix; - } - - /** - * @param LoadClassMetadataEventArgs $eventArgs - */ - public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void - { - $classMetadata = $eventArgs->getClassMetadata(); - - if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName( - ) === $classMetadata->rootEntityName) { - $classMetadata->setPrimaryTable( - [ - 'name' => $this->prefix . $classMetadata->getTableName() - ] - ); - } - - foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) { - if ($mapping['type'] === ClassMetadataInfo::MANY_TO_MANY && $mapping['isOwningSide']) { - $mappedTableName = $mapping['joinTable']['name']; - $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName; - } - } - } - -} diff --git a/core/base/Module/View/Handler.php b/core/base/Module/View/Handler.php deleted file mode 100644 index 256cead8f..000000000 --- a/core/base/Module/View/Handler.php +++ /dev/null @@ -1,39 +0,0 @@ -requestObj = $request; - $this->config = $config; - } - - /** - * @return object - * @throws \Exception - */ - public function load() - { - // Check the correct controller and action is going to load based on the URI - - $module = ($this->requestObj->query->has('module')) ? $this->requestObj->query->get('module') : ''; - $controller = ($this->requestObj->query->has('controller')) ? $this->requestObj->query->get('controller') : ''; - $action = ($this->requestObj->query->has('action')) ? $this->requestObj->query->get('action') : ''; - - // Run Installer if database config hasn't been configured - - if (empty($module)) { - // Check mandatory parameters are set - - if (!$this->config->has('app.default_route.module')) { - throw new \RuntimeException('Default module has not been configured.'); - } - - $module = $this->config->get('app.default_route.module'); - } - - if (empty($controller)) { - // Check mandatory parameters are set - if (!$this->config->has('app.default_route.controller')) { - throw new \RuntimeException('Default controller has not been configured.'); - } - - $controller = $this->config->get('app.default_route.controller'); - } - - if (empty($action)) { - // Check mandatory parameters are set - if (!$this->config->has('app.default_route.action')) { - throw new \RuntimeException('Default action has not been configured.'); - } - - $action = $this->config->get('app.default_route.action'); - } - - $format = 'SuiteCRM\Core\Modules\%s\Controller\%s'; - - $controller = sprintf($format, ucfirst($module), ucfirst($controller)); - - // run the controller action - return (object)[ - 'module' => $module, - 'controller' => $controller, - 'action' => 'action' . ucfirst($action) - ]; - } -} diff --git a/core/base/Route/ModRewriteRouter.php b/core/base/Route/ModRewriteRouter.php deleted file mode 100644 index 4f15d7cd4..000000000 --- a/core/base/Route/ModRewriteRouter.php +++ /dev/null @@ -1,99 +0,0 @@ -requestObj = $request; - $this->config = $config; - } - - /** - * @return object - * @throws \Exception - */ - public function load() - { - // Check the correct controller and action is going to load based on the URI - if ($this->requestObj->query->has('query_string')) { - $uri = explode('/', $this->requestObj->query->get('query_string')); - - if (count($uri) === 1) { - array_push($uri, '', ''); - } elseif (count($uri) === 2) { - $uri[] = ''; - } - - [$module, $controller, $action] = $uri; - } - - // Run Installer if database config hasn't been configured - - if (empty($module)) { - // Check mandatory parameters are set - - if (!$this->config->has('app.default_route.module')) { - throw new \RuntimeException('Default module has not been configured.'); - } - - $module = $this->config->get('app.default_route.module'); - } - - if (empty($controller)) { - // Check mandatory parameters are set - if (!$this->config->has('app.default_route.controller')) { - throw new \RuntimeException('Default controller has not been configured.'); - } - - $controller = $this->config->get('app.default_route.controller'); - } - - if (empty($action)) { - // Check mandatory parameters are set - if (!$this->config->has('app.default_route.action')) { - throw new \RuntimeException('Default action has not been configured.'); - } - - $action = $this->config->get('app.default_route.action'); - } - - $format = 'SuiteCRM\Core\Modules\%s\Controller\%s'; - - $controller = sprintf($format, ucfirst($module), ucfirst($controller)); - - // run the controller action - return (object)[ - 'module' => $module, - 'controller' => $controller, - 'action' => 'action' . ucfirst($action) - ]; - } -} diff --git a/core/base/Route/RouterInterface.php b/core/base/Route/RouterInterface.php deleted file mode 100644 index 97a1998ae..000000000 --- a/core/base/Route/RouterInterface.php +++ /dev/null @@ -1,15 +0,0 @@ -config = $config; @@ -33,18 +33,18 @@ class Authentication extends LegacyHandler * @param $grant_type * * @return boolean - * @throws \Exception + * @throws Exception */ public function login($username, $password, $grant_type = 'password'): bool { if ($this->runLegacyEntryPoint()) { - $authController = new \AuthenticationController(); + $authController = new AuthenticationController(); $PARAMS = []; return $authController->login($username, $password, $PARAMS); } - throw new \RuntimeException('Running legacy entry point failed'); + throw new RuntimeException('Running legacy entry point failed'); } } diff --git a/core/legacy/AuthenticationService.php b/core/legacy/AuthenticationService.php index 51ed794eb..4808d0c55 100644 --- a/core/legacy/AuthenticationService.php +++ b/core/legacy/AuthenticationService.php @@ -2,15 +2,13 @@ namespace SuiteCRM\Core\Legacy; -use SuiteCRM\Core\Base\Module\Service\ServiceFactoryInterface; - use SuiteCRM\Core\Legacy\Authentication; /** * Class AuthenticationService * @package SuiteCRM\Core\Legacy */ -class AuthenticationService implements ServiceFactoryInterface +class AuthenticationService { /** * @return string diff --git a/core/legacy/Navbar.php b/core/legacy/Navbar.php index 789222182..c234c224c 100644 --- a/core/legacy/Navbar.php +++ b/core/legacy/Navbar.php @@ -27,7 +27,9 @@ class Navbar extends LegacyHandler throw new RuntimeException('Running legacy entry point failed'); } - + /** + * @return array + */ public function getGroupedNavTabs(): array { if ($this->runLegacyEntryPoint()) { diff --git a/core/legacy/NavbarService.php b/core/legacy/NavbarService.php index fdf4b44cd..4820ea598 100644 --- a/core/legacy/NavbarService.php +++ b/core/legacy/NavbarService.php @@ -2,13 +2,11 @@ namespace SuiteCRM\Core\Legacy; -use SuiteCRM\Core\Base\Module\Service\ServiceFactoryInterface; - /** * Class NavbarService * @package SuiteCRM\Core\Legacy */ -class NavbarService implements ServiceFactoryInterface +class NavbarService { /** * @return string diff --git a/core/modules/Administration/Administration.php b/core/modules/Administration/Administration.php deleted file mode 100644 index cf399c2bc..000000000 --- a/core/modules/Administration/Administration.php +++ /dev/null @@ -1,28 +0,0 @@ -config = $config; - $this->file = new File(); - } - - protected function configure(): void - { - $this - ->setName('composer:install') - ->setDescription('Install core composer dependencies') - ->setHelp('This command will install all required project dependencies') - ->addOption( - 'nodev', - '', - InputOption::VALUE_NONE, - 'Install without dev packages' - ); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int|void|null - */ - public function execute(InputInterface $input, OutputInterface $output) - { - $currentDir = __DIR__ . '/../../../../../'; - - $optionValue = $input->getOption('nodev'); - $noDev = ($optionValue !== false); - - if ($noDev === true) { - shell_exec('composer install --no-dev'); - chdir($currentDir . 'legacy'); - - shell_exec('composer install --no-dev'); - chdir($currentDir); - } - - shell_exec('composer install'); - chdir($currentDir . 'legacy'); - - shell_exec('composer install'); - chdir($currentDir); - } -} diff --git a/core/modules/Administration/Cli/Composer/ComposerUpdateCommand.php b/core/modules/Administration/Cli/Composer/ComposerUpdateCommand.php deleted file mode 100644 index 3b808131e..000000000 --- a/core/modules/Administration/Cli/Composer/ComposerUpdateCommand.php +++ /dev/null @@ -1,53 +0,0 @@ -config = $config; - $this->file = new File(); - } - - protected function configure(): void - { - $this - ->setName('composer:update') - ->setDescription('Update core composer dependencies') - ->setHelp('This command will install all required project dependencies'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int|void|null - */ - public function execute(InputInterface $input, OutputInterface $output) - { - $currentDir = __DIR__ . '/../../../../../'; - - shell_exec('composer update'); - chdir($currentDir . 'legacy'); - - shell_exec('composer update'); - chdir($currentDir); - } -} diff --git a/core/modules/Administration/Cli/Modules/ListModulesCommand.php b/core/modules/Administration/Cli/Modules/ListModulesCommand.php deleted file mode 100644 index f117996f6..000000000 --- a/core/modules/Administration/Cli/Modules/ListModulesCommand.php +++ /dev/null @@ -1,63 +0,0 @@ -setName('core:modules:list-all') - ->setDescription('List Application Modules') - ->setHelp('This command will list the possible Application Modules.'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int|void|null - * @throws \Exception - */ - public function execute(InputInterface $input, OutputInterface $output) - { - $io = new SymfonyStyle($input, $output); - - $io->success('List of all modules.'); - - $parameterCollection = (new ConfigManager())->loadFiles( - [ - BASE_PATH . '/core/base/Config/modules.config.yml' - ] - ); - - $fileHelper = new File(); - - $modules = (new ModuleManager($parameterCollection, $fileHelper))->listEnabled(); - - $tableHeaders = [ - ['Module Name', 'Module Description'] - ]; - - for ($i = 0, $iMax = count($modules); $i < $iMax; $i++) { - $moduleData[$i] = [ - $modules[$i]->getName(), - $modules[$i]->getDescription() - ]; - } - - $io->table($tableHeaders, $moduleData); - } -} diff --git a/core/modules/Administration/Cli/Repair/QuickRepairRebuildCommand.php b/core/modules/Administration/Cli/Repair/QuickRepairRebuildCommand.php deleted file mode 100644 index 66332393d..000000000 --- a/core/modules/Administration/Cli/Repair/QuickRepairRebuildCommand.php +++ /dev/null @@ -1,33 +0,0 @@ -setName('admin:repair:quick-repair-rebuild') - ->setDescription('Run Quick Repair and Rebuild') - ->setHelp('This command allows you to run the repair and rebuild.'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int|void|null - */ - public function execute(InputInterface $input, OutputInterface $output) - { - } -} diff --git a/core/modules/Administration/Cli/Users/AddNewUserCommand.php b/core/modules/Administration/Cli/Users/AddNewUserCommand.php deleted file mode 100644 index 5bdc646b9..000000000 --- a/core/modules/Administration/Cli/Users/AddNewUserCommand.php +++ /dev/null @@ -1,36 +0,0 @@ -setName('admin:add-new-user') - ->setDescription('Add new user to the system') - ->setHelp('This command allows you to run the add new user to the system.'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int|void - */ - public function execute(InputInterface $input, OutputInterface $output) - { - /** - * @todo : Create input for user before creating - */ - } -} diff --git a/core/modules/Users/Config/orm/OAuthAccessToken.orm.yml b/core/modules/Users/Config/orm/OAuthAccessToken.orm.yml deleted file mode 100644 index e807c6d7d..000000000 --- a/core/modules/Users/Config/orm/OAuthAccessToken.orm.yml +++ /dev/null @@ -1,37 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthAccessToken: - type: entity - table: oauth_access_tokens - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthAccessTokenStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - token: - type: string - max_length: 40 - unique: true - client_id: - type: integer - user_id: - type: integer - nullable: true - expires: - type: datetime - #columnDefinition: TIMESTAMP - scope: - type: string - max_length: 50 - nullable: true - manyToOne: - client: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthClient - joinColumn: - name: client_id - referencedColumnName: id - user: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthUser - joinColumn: - name: user_id - referencedColumnName: id diff --git a/core/modules/Users/Config/orm/OAuthAuthorizationCode.orm.yml b/core/modules/Users/Config/orm/OAuthAuthorizationCode.orm.yml deleted file mode 100644 index 4794ab0f5..000000000 --- a/core/modules/Users/Config/orm/OAuthAuthorizationCode.orm.yml +++ /dev/null @@ -1,42 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthAuthorizationCode: - type: entity - table: oauth_authorisation_codes - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthAuthorizationCodeStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - code: - type: string - max_length: 40 - unique: true - client_id: - type: integer - user_id: - type: integer - nullable: true - expires: - type: datetime - redirect_uri: - type: string - max_length: 200 - scope: - type: string - max_length: 50 - nullable: true - id_token: - type: string - length: 1000 - manyToOne: - client: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthClient - joinColumn: - name: client_id - referencedColumnName: id - user: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthUser - joinColumn: - name: user_id - referencedColumnName: id diff --git a/core/modules/Users/Config/orm/OAuthClient.orm.yml b/core/modules/Users/Config/orm/OAuthClient.orm.yml deleted file mode 100644 index acdae338b..000000000 --- a/core/modules/Users/Config/orm/OAuthClient.orm.yml +++ /dev/null @@ -1,22 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthClient: - type: entity - table: oauth_client - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthClientStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - client_identifier: - type: string - max_length: 50 - unique: true - client_secret: - type: string - max_length: 20 - default: "" - redirect_uri: - type: string - max_length: 255 - default: "" \ No newline at end of file diff --git a/core/modules/Users/Config/orm/OAuthPublicKey.orm.yml b/core/modules/Users/Config/orm/OAuthPublicKey.orm.yml deleted file mode 100644 index 276a8125e..000000000 --- a/core/modules/Users/Config/orm/OAuthPublicKey.orm.yml +++ /dev/null @@ -1,22 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthPublicKey: - type: entity - table: oauth_public_key - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthPublicKeyStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - public_key: - type: string - length: 2000 - private_key: - type: string - length: 2000 - manyToOne: - client: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthClient - joinColumn: - name: client_id - referencedColumnName: id diff --git a/core/modules/Users/Config/orm/OAuthRefreshToken.orm.yml b/core/modules/Users/Config/orm/OAuthRefreshToken.orm.yml deleted file mode 100644 index db8331982..000000000 --- a/core/modules/Users/Config/orm/OAuthRefreshToken.orm.yml +++ /dev/null @@ -1,37 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthRefreshToken: - type: entity - table: oauth_refresh_tokens - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthRefreshTokenStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - refresh_token: - refresh_token: string - max_length: 40 - unique: true - client_id: - type: integer - user_id: - type: integer - nullable: true - expires: - type: datetime - column: expires - scope: - type: string - max_length: 50 - nullable: true - manyToOne: - client: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthClient - joinColumn: - name: client_id - referencedColumnName: id - user: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthUser - joinColumn: - name: user_id - referencedColumnName: id diff --git a/core/modules/Users/Config/orm/OAuthUser.orm.yml b/core/modules/Users/Config/orm/OAuthUser.orm.yml deleted file mode 100644 index fe53ea1a3..000000000 --- a/core/modules/Users/Config/orm/OAuthUser.orm.yml +++ /dev/null @@ -1,20 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthUser: - type: entity - table: oauth_users - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthUserStorage - id: - id: - type: integer - generator: - strategy: AUTO - fields: - username: - unique: true - type: string - column: user_name - password: - type: string - column: user_hash - indexes: - user_name_index: - columns: [ user_name ] diff --git a/core/modules/Users/Config/orm/OAuthUserClaims.orm.yml b/core/modules/Users/Config/orm/OAuthUserClaims.orm.yml deleted file mode 100644 index 114270d2c..000000000 --- a/core/modules/Users/Config/orm/OAuthUserClaims.orm.yml +++ /dev/null @@ -1,15 +0,0 @@ -SuiteCRM\Core\Modules\Users\Entity\OAuthUserClaims: - type: entity - table: oauth_user_claims - repositoryClass: SuiteCRM\Core\Modules\Users\Storage\OAuthUserClaimsStorage - id: - id: - type: integer - generator: - strategy: AUTO - manyToOne: - user: - targetEntity: SuiteCRM\Core\Modules\Users\Entity\OAuthUser - joinColumn: - name: user_id - referencedColumnName: id diff --git a/core/modules/Users/Controller/Oauth.php b/core/modules/Users/Controller/Oauth.php deleted file mode 100644 index 1880f9b5a..000000000 --- a/core/modules/Users/Controller/Oauth.php +++ /dev/null @@ -1,213 +0,0 @@ -requestObj); - $response = new OAuth2Response(); - // Load authentication service - $authenticationService = $this->getService('users.authentication'); - - // Load config parameters - $authenticationService->setConfig($this->config); - - // Get params - $username = $this->requestObj->request->get('username'); - $password = $this->requestObj->request->get('password'); - - if ($authenticationService->login($username, $password)) { - // Get storage classes - $clientStorage = $this->getStorage('users.oAuthClient'); - $userStorage = $this->getStorage('users.oAuthUser'); - $accessTokenStorage = $this->getStorage('users.oAuthAccessToken'); - $authorizationCodeStorage = $this->getStorage('users.oAuthAuthorizationCode'); - $refreshTokenStorage = $this->getStorage('users.oAuthRefreshToken'); - - $storage = [ - 'client_credentials' => $clientStorage, - 'user_credentials' => $userStorage, - 'access_token' => $accessTokenStorage, - 'authorization_code' => $authorizationCodeStorage, - 'refresh_token' => $refreshTokenStorage, - ]; - - $config = []; - - // Set up oauth2 server - $server = new OAuth2Server( - $storage, - $config - ); - - // Grant token with client details are in system - if (!$token = $server->grantAccessToken($request, $response)) { - $response->send(); - die(); - } - - // Output token in json format - $this->responseObj->headers->set('Content-Type', 'application/json'); - - return $this->responseObj - ->setContent( - json_encode($token) - ) - ->send(); - } - - // Response with unauthorised. - $this->responseObj->headers->set('Content-Type', 'application/json'); - - return $this->responseObj - ->setContent( - json_encode( - [ - 'message' => 'Authentication: Unauthorised', - 'code' => '401', - ] - ) - ) - ->setStatusCode(401) - ->send(); - } - - public function actionLogout(): void - { - $request = \OAuth2\HttpFoundationBridge\Request::createFromRequest($this->requestObj); - - $clientStorage = $this->getStorage('users.oAuthClient'); - $userStorage = $this->getStorage('users.oAuthUser'); - $accessTokenStorage = $this->getStorage('users.oAuthAccessToken'); - $authorizationCodeStorage = $this->getStorage('users.oAuthAuthorizationCode'); - $refreshTokenStorage = $this->getStorage('users.oAuthRefreshToken'); - - $storage = [ - 'client_credentials' => $clientStorage, - 'user_credentials' => $userStorage, - 'access_token' => $accessTokenStorage, - 'authorization_code' => $authorizationCodeStorage, - 'refresh_token' => $refreshTokenStorage, - ]; - - $config = []; - - $server = new OAuth2Server( - $storage, - $config - ); - - // Handle a request to a resource and authenticate the access token - if (!$server->verifyResourceRequest($request)) { - var_dump($server->getResponse()); - die(); - } - - $accessToken = $this->requestObj->request->get('access_token'); - $refreshAccessToken = $this->requestObj->request->get('refresh_token'); - - $accessTokenStorage->expireToken($accessToken); - $refreshTokenStorage->expireToken($refreshAccessToken); - - echo json_encode(['success' => true, 'message' => 'Logout Success']); - } - - public function refreshToken(): void - { - } - - public function actionAccessToken(): void - { -// $config = array(); -// -// $requestObj = \OAuth2\HttpFoundationBridge\Request::createFromRequest($this->requestObj); -// -// $clientStorage = $this->getStorage('users.oAuthClient'); -// $userStorage = $this->getStorage('users.oAuthUser'); -// $accessTokenStorage = $this->getStorage('users.oAuthAccessToken'); -// $authorizationCodeStorage = $this->getStorage('users.oAuthAuthorizationCode'); -// $refreshTokenStorage = $this->getStorage('users.oAuthRefreshToken'); -// $publicKeyStorage = $this->getStorage('users.oAuthPublicKey'); -// -// $storage = array( -// 'client_credentials' => $clientStorage, -// 'user_credentials' => $userStorage, -// 'access_token' => $accessTokenStorage, -// 'authorization_code' => $authorizationCodeStorage, -// 'refresh_token' => $refreshTokenStorage -// ); -// -// $grantType = $requestObj->request->get('grant_type'); -// -// if ($grantType == 'refresh_token') { -// // Set default refresh token parameters -// $refreshTokenLifetime = 10; -// $alwaysIssueNewRefreshToken = false; -// -// // Get config refresh token parameters if set -// if ($this->config->has('app.refresh_token_lifetime')) { -// $refreshAccessToken = (int) $this->config->get('app.refresh_token_lifetime'); -// } -// -// if ($this->config->has('app.always_issue_new_refresh_token')) { -// $alwaysIssueNewRefreshToken = (boolean) $this->config->get('app.always_issue_new_refresh_token'); -// } -// -// $config = array( -// 'always_issue_new_refresh_token' => $alwaysIssueNewRefreshToken, -// 'refresh_token_lifetime' => $refreshTokenLifetime, -// ); -// } -// -// $server = new OAuth2Server($storage, $config); -// -// if ($grantType == 'password') { -//// $username = $params['user_name']; -//// $password = $params['user_hash']; -// -// // Add the grant type to your OAuth server -// $server->addGrantType(new OAuth2GrantTypeUserCredentials($userStorage)); -// -// $config = array(); -// } elseif ($grantType == "refresh_token") { -// // Add the grant type to your OAuth server -// -// $objectGrantType = new OAuth2GrantTypeRefreshToken($refreshTokenStorage); -// -// $server->addGrantType($objectGrantType); -// -// // The refresh token -// $accessToken = new OAuth2ResponseTypeAccessToken($accessTokenStorage, $refreshTokenStorage, array( -// 'refresh_token_lifetime' => $refreshTokenLifetime, -// )); -// -// $server = new OAuth2Server($storage, $config, [$objectGrantType], array($accessToken)); -// } else { -// throw new \Exception('Grant type - not supported.'); -// } -// -// $tokenResponse = $server->handleTokenRequest($requestObj); -// -// $statusCode = $tokenResponse->getStatusCode(); -// $parameters = $tokenResponse->getParameters(); -// -// return $tokenResponse->send(); - } -} diff --git a/core/modules/Users/Entity/EncryptableField.php b/core/modules/Users/Entity/EncryptableField.php deleted file mode 100644 index aa6403767..000000000 --- a/core/modules/Users/Entity/EncryptableField.php +++ /dev/null @@ -1,31 +0,0 @@ - 11]; - - /** - * @param $value - * @return mixed - */ - protected function encryptField($value) - { - return $value; - - // return password_hash( - // $value, PASSWORD_BCRYPT, $this->hashOptions); - } - - /** - * @param $encryptedValue - * @param $value - * @return bool - */ - protected function verifyEncryptedFieldValue($encryptedValue, $value): bool - { - return ($encryptedValue == $value); - //return password_verify($value, $encryptedValue); - } -} diff --git a/core/modules/Users/Entity/OAuthAccessToken.php b/core/modules/Users/Entity/OAuthAccessToken.php deleted file mode 100644 index 083096e93..000000000 --- a/core/modules/Users/Entity/OAuthAccessToken.php +++ /dev/null @@ -1,248 +0,0 @@ -id; - } - - /** - * Set token - * - * @param string $token - * @return OAuthAccessToken - */ - public function setToken($token): OAuthAccessToken - { - $this->token = $token; - - return $this; - } - - /** - * Get token - * - * @return string - */ - public function getToken(): string - { - return $this->token; - } - - /** - * Set client_id - * - * @param string $clientId - * @return OAuthAccessToken - */ - public function setClientId($clientId): OAuthAccessToken - { - $this->client_id = $clientId; - - return $this; - } - - /** - * Get client_id - * - * @return string - */ - public function getClientId(): string - { - return $this->client_id; - } - - /** - * Set user_id - * - * @param $userId - * @return OAuthAccessToken - */ - public function setUserId($userId): OAuthAccessToken - { - $this->user_id = $userId; - - return $this; - } - - /** - * Get user_identifier - * - * @return string - */ - public function getUserId(): string - { - return $this->user_id; - } - - /** - * Set expires - * - * @param \DateTime $expires - * @return OAuthAccessToken - */ - public function setExpires($expires): OAuthAccessToken - { - $this->expires = $expires; - - return $this; - } - - /** - * Get expires - * - * @return \DateTime - */ - public function getExpires(): \DateTime - { - return $this->expires; - } - - /** - * Set scope - * - * @param string $scope - * @return OAuthAccessToken - */ - public function setScope($scope): OAuthAccessToken - { - $this->scope = $scope; - - return $this; - } - - /** - * Get scope - * - * @return string - */ - public function getScope(): string - { - return $this->scope; - } - - /** - * Set client - * - * @param SuiteCRM\Core\Modules\Users\Entity\OAuthClient $client - * @return OAuthAccessToken - */ - public function setClient(SuiteCRM\Core\Modules\Users\Entity\OAuthClient $client = null): OAuthAccessToken - { - $this->client = $client; - - return $this; - } - - /** - * Get client - * - * @return SuiteCRM\Core\Modules\Users\Entity\OAuthClient - */ - public function getClient(): SuiteCRM\Core\Modules\Users\Entity\OAuthClient - { - return $this->client; - } - - /** - * @param $params - * @return OAuthAccessToken - */ - public static function fromArray($params): OAuthAccessToken - { - $token = new self(); - foreach ($params as $property => $value) { - $token->$property = $value; - } - - return $token; - } - - /** - * Set user - * - * @param SuiteCRM\Core\Modules\Users\Entity\OAuthUser $user - * @return OAuthRefreshToken - */ - public function setUser(SuiteCRM\Core\Modules\Users\Entity\OAuthUser $user = null): OAuthRefreshToken - { - $this->user = $user; - - return $this; - } - - /** - * Get user - * - * @return SuiteCRM\Core\Modules\Users\Entity\OAuthUser - */ - public function getUser(): SuiteCRM\Core\Modules\Users\Entity\OAuthUser - { - return $this->client; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'token' => $this->token, - 'client_id' => $this->client_id, - 'user_id' => $this->user_id, - 'expires' => $this->expires, - 'scope' => $this->scope, - ]; - } -} diff --git a/core/modules/Users/Entity/OAuthAuthorizationCode.php b/core/modules/Users/Entity/OAuthAuthorizationCode.php deleted file mode 100644 index 4bd8b4e47..000000000 --- a/core/modules/Users/Entity/OAuthAuthorizationCode.php +++ /dev/null @@ -1,303 +0,0 @@ -id; - } - - /** - * Set code - * - * @param string $code - * @return OAuthAuthorizationCode - */ - public function setCode($code): OAuthAuthorizationCode - { - $this->code = $code; - - return $this; - } - - /** - * Get code - * - * @return string - */ - public function getCode(): string - { - return $this->code; - } - - /** - * Set client_id - * - * @param string $clientId - * @return OAuthAuthorizationCode - */ - public function setClientId($clientId): OAuthAuthorizationCode - { - $this->client_id = $clientId; - - return $this; - } - - /** - * Get client_id - * - * @return string - */ - public function getClientId(): string - { - return $this->client_id; - } - - /** - * Set user_id - * - * @param $userId - * @return OAuthAuthorizationCode - */ - public function setUserId($userId): OAuthAuthorizationCode - { - $this->user_id = $userId; - - return $this; - } - - /** - * Get user_identifier - * - * @return string - */ - public function getUserId(): string - { - return $this->user_id; - } - - /** - * Set expires - * - * @param \DateTime $expires - * @return OAuthAuthorizationCode - */ - public function setExpires($expires): OAuthAuthorizationCode - { - $this->expires = $expires; - - return $this; - } - - /** - * Get expires - * - * @return \DateTime - */ - public function getExpires(): \DateTime - { - return $this->expires; - } - - /** - * Set redirect_uri - * - * @param string $redirectUri - * @return OAuthAuthorizationCode - */ - public function setRedirectUri($redirectUri): OAuthAuthorizationCode - { - $this->redirect_uri = $redirectUri; - - return $this; - } - - /** - * Get redirect_uri - * - * @return string - */ - public function getRedirectUri(): string - { - return $this->redirect_uri; - } - - /** - * Set scope - * - * @param string $scope - * @return OAuthAuthorizationCode - */ - public function setScope($scope): OAuthAuthorizationCode - { - $this->scope = $scope; - - return $this; - } - - /** - * Get scope - * - * @return string - */ - public function getScope(): string - { - return $this->scope; - } - - /** - * Set client - * - * @param OAuthClient $client - * @return OAuthAuthorizationCode - */ - public function setClient(OAuthClient $client = null): OAuthAuthorizationCode - { - $this->client = $client; - - return $this; - } - - /** - * Get client - * - * @return OAuthClient - */ - public function getClient(): OAuthClient - { - return $this->client; - } - - /** - * Set user - * - * @param OAuthUser $user - * @return OAuthRefreshToken - */ - public function setUser(OAuthUser $user = null): OAuthRefreshToken - { - $this->user = $user; - - return $this; - } - - /** - * Get user - * - * @return \YourNamespace\Entity\OAuthUser - */ - public function getUser(): \YourNamespace\Entity\OAuthUser - { - return $this->client; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'code' => $this->code, - 'client_id' => $this->client_id, - 'user_id' => $this->user_id, - 'expires' => $this->expires, - 'scope' => $this->scope, - ]; - } - - /** - * @param $params - * @return OAuthAuthorizationCode - */ - public static function fromArray($params): OAuthAuthorizationCode - { - $code = new self(); - foreach ($params as $property => $value) { - $code->$property = $value; - } - - return $code; - } - - /** - * Get the value of Id Token - * - * @return string - */ - public function getIdToken(): string - { - return $this->id_token; - } - - /** - * Set the value of Id Token - * - * @param string id_token - * - * @return self - */ - public function setIdToken($id_token): self - { - $this->id_token = $id_token; - - return $this; - } - -} diff --git a/core/modules/Users/Entity/OAuthClient.php b/core/modules/Users/Entity/OAuthClient.php deleted file mode 100644 index 4a827d8b8..000000000 --- a/core/modules/Users/Entity/OAuthClient.php +++ /dev/null @@ -1,195 +0,0 @@ - $val) { - if (property_exists($this, $key)) { - $this->{$key} = $val; - } - } - - if ($this->id == 0) { - $this->created_date = new \DateTime(); - } - - $this->modified_date = new \DateTime(); - } - - /** - * Get id - * - * @return int - */ - public function getId(): int - { - return $this->id; - } - - /** - * Set client_identifier - * - * @param string $clientIdentifier - * @return OAuthClient - */ - public function setClientIdentifier($clientIdentifier): OAuthClient - { - $this->client_identifier = $clientIdentifier; - - return $this; - } - - /** - * Get client_identifier - * - * @return string - */ - public function getClientIdentifier(): string - { - return $this->client_identifier; - } - - /** - * Set client_secret - * - * @param string $clientSecret - * @return OAuthClient - */ - public function setClientSecret($clientSecret): OAuthClient - { - $this->client_secret = $this->encryptField($clientSecret); - - return $this; - } - - /** - * Get client_secret - * - * @return string - */ - public function getClientSecret(): string - { - return $this->client_secret; - } - - /** - * Verify client's secret - * - * @param $clientSecret - * @return Boolean - */ - public function verifyClientSecret($clientSecret): bool - { - return $this->verifyEncryptedFieldValue($this->getClientSecret(), $clientSecret); - } - - /** - * Set redirect_uri - * - * @param string $redirectUri - * @return OAuthClient - */ - public function setRedirectUri($redirectUri): OAuthClient - { - $this->redirect_uri = $redirectUri; - - return $this; - } - - /** - * Get redirect_uri - * - * @return string - */ - public function getRedirectUri(): string - { - return $this->redirect_uri; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'client_id' => $this->client_identifier, - 'client_secret' => $this->client_secret, - 'redirect_uri' => $this->redirect_uri, - ]; - } - - /** - * Set the value of Id - * - * @param int id - * - * @return self - */ - public function setId($id): self - { - $this->id = $id; - - return $this; - } - - /** - * Get the value of Status - * - * @return mixed - */ - public function getStatus() - { - return $this->status; - } - - /** - * Set the value of Status - * - * @param mixed status - * - * @return self - */ - public function setStatus($status): self - { - $this->status = $status; - - return $this; - } - -} diff --git a/core/modules/Users/Entity/OAuthPublicKey.php b/core/modules/Users/Entity/OAuthPublicKey.php deleted file mode 100644 index dbb328f4e..000000000 --- a/core/modules/Users/Entity/OAuthPublicKey.php +++ /dev/null @@ -1,127 +0,0 @@ -id; - } - - /** - * Set the value of Id - * - * @param integar id - * - * @return self - */ - public function setId(integar $id): self - { - $this->id = $id; - - return $this; - } - - /** - * Get the value of Public Key - * - * @return string - */ - public function getPublicKey(): string - { - return $this->public_key; - } - - /** - * Set the value of Public Key - * - * @param string public_key - * - * @return self - */ - public function setPublicKey($public_key): self - { - $this->public_key = $public_key; - - return $this; - } - - /** - * Get the value of Private Key - * - * @return string - */ - public function getPrivateKey(): string - { - return $this->private_key; - } - - /** - * Set the value of Private Key - * - * @param string private_key - * - * @return self - */ - public function setPrivateKey($private_key): self - { - $this->private_key = $private_key; - - return $this; - } - - /** - * Set client - * - * @param OAuthClient $client - * @return OAuthAuthorizationCode - */ - public function setClient(OAuthClient $client = null): OAuthAuthorizationCode - { - $this->client = $client; - - return $this; - } - - /** - * Get client - * - * @return \YourNamespace\Entity\OAuthClient - */ - public function getClient(): \YourNamespace\Entity\OAuthClient - { - return $this->client; - } - -} diff --git a/core/modules/Users/Entity/OAuthRefreshToken.php b/core/modules/Users/Entity/OAuthRefreshToken.php deleted file mode 100644 index 43f99ee06..000000000 --- a/core/modules/Users/Entity/OAuthRefreshToken.php +++ /dev/null @@ -1,245 +0,0 @@ -id; - } - - /** - * Set refresh_token - * - * @param string $refresh_token - * @return OAuthRefreshToken - */ - public function setRefreshToken($refresh_token): OAuthRefreshToken - { - $this->refresh_token = $refresh_token; - - return $this; - } - - /** - * Get refresh_token - * - * @return string - */ - public function getRefreshToken(): string - { - return $this->refresh_token; - } - - /** - * Set client_id - * - * @param string $clientId - * @return OAuthRefreshToken - */ - public function setClientId($clientId): OAuthRefreshToken - { - $this->client_id = $clientId; - - return $this; - } - - /** - * Get client_id - * - * @return string - */ - public function getClientId(): string - { - return $this->client_id; - } - - /** - * Set user_id - * - * @param $userId - * @return OAuthRefreshToken - */ - public function setUserId($userId): OAuthRefreshToken - { - $this->user_id = $userId; - - return $this; - } - - /** - * Get user_identifier - * - * @return string - */ - public function getUserId(): string - { - return $this->user_id; - } - - /** - * Set expires - * - * @param \DateTime $expires - * @return OAuthRefreshToken - */ - public function setExpires($expires): OAuthRefreshToken - { - $this->expires = $expires; - - return $this; - } - - /** - * Get expires - * - * @return \DateTime - */ - public function getExpires(): \DateTime - { - return $this->expires; - } - - /** - * Set scope - * - * @param string $scope - * @return OAuthRefreshToken - */ - public function setScope($scope): OAuthRefreshToken - { - $this->scope = $scope; - - return $this; - } - - /** - * Get scope - * - * @return string - */ - public function getScope(): string - { - return $this->scope; - } - - /** - * Set client - * - * @param SuiteCRM\Core\Modules\Users\Entity\OAuthClient $client - * @return OAuthRefreshToken - */ - public function setClient(SuiteCRM\Core\Modules\Users\Entity\OAuthClient $client = null): OAuthRefreshToken - { - $this->client = $client; - - return $this; - } - - /** - * Get client - * - * @return SuiteCRM\Core\Modules\Users\Entity\OAuthClient - */ - public function getClient(): SuiteCRM\Core\Modules\Users\Entity\OAuthClient - { - return $this->client; - } - - /** - * Set user - * - * @param SuiteCRM\Core\Modules\Users\Entity\OAuthUser $user - * @return OAuthRefreshToken - */ - public function setUser(SuiteCRM\Core\Modules\Users\Entity\OAuthUser $user = null): OAuthRefreshToken - { - $this->user = $user; - - return $this; - } - - /** - * Get user - * - * @return SuiteCRM\Core\Modules\Users\Entity\OAuthUser - */ - public function getUser(): SuiteCRM\Core\Modules\Users\Entity\OAuthUser - { - return $this->client; - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'refresh_token' => $this->refresh_token, - 'client_id' => $this->client_id, - 'user_id' => $this->user_id, - 'expires' => $this->expires, - 'scope' => $this->scope, - ]; - } - - /** - * @param $params - * @return OAuthRefreshToken - */ - public static function fromArray($params): OAuthRefreshToken - { - $token = new self(); - foreach ($params as $property => $value) { - $token->$property = $value; - } - - return $token; - } -} diff --git a/core/modules/Users/Entity/OAuthUser.php b/core/modules/Users/Entity/OAuthUser.php deleted file mode 100644 index b1774e936..000000000 --- a/core/modules/Users/Entity/OAuthUser.php +++ /dev/null @@ -1,108 +0,0 @@ -id; - } - - /** - * Set username - * - * @param $username - * @return User - */ - public function setUsername($username): User - { - $this->username = $username; - - return $this; - } - - /** - * Get username - * - * @return string - */ - public function getUsername(): string - { - return $this->username; - } - - /** - * Set password - * - * @param string $password - * @return User - */ - public function setPassword($password): User - { - $this->password = $this->encryptField($password); - - return $this; - } - - /** - * Get password - * - * @return string - */ - public function getPassword(): string - { - return $this->password; - } - - /** - * Verify user's password - * - * @param string $password - * @return Boolean - */ - public function verifyPassword($password): bool - { - return $this->verifyEncryptedFieldValue($this->getPassword(), $password); - } - - /** - * Get OAuthUser object in array format - * - * @return array - */ - public function toArray(): array - { - return [ - 'user_id' => $this->id, - 'scope' => null, - ]; - } -} diff --git a/core/modules/Users/Entity/OAuthUserClaims.php b/core/modules/Users/Entity/OAuthUserClaims.php deleted file mode 100644 index 22b6db699..000000000 --- a/core/modules/Users/Entity/OAuthUserClaims.php +++ /dev/null @@ -1,99 +0,0 @@ -id; - } - - /** - * Set the value of Id - * - * @param string id - * - * @return self - */ - public function setId($id): self - { - $this->id = $id; - - return $this; - } - - /** - * Get the value of Id Token - * - * @return string - */ - public function getIdToken(): string - { - return $this->id_token; - } - - /** - * Set the value of Id Token - * - * @param string id_token - * - * @return self - */ - public function setIdToken($id_token): self - { - $this->id_token = $id_token; - - return $this; - } - - /** - * Get the value of User Id - * - * @return string - */ - public function getUserId(): string - { - return $this->user_id; - } - - /** - * Set the value of User Id - * - * @param string user_id - * - * @return self - */ - public function setUserId($user_id): self - { - $this->user_id = $user_id; - - return $this; - } - -} diff --git a/core/modules/Users/Entity/UserProfile.php b/core/modules/Users/Entity/UserProfile.php deleted file mode 100644 index a441297f4..000000000 --- a/core/modules/Users/Entity/UserProfile.php +++ /dev/null @@ -1,13 +0,0 @@ -findOneBy(['token' => $oauthToken]); - - if ($token) { - $token = $token->toArray(); - $token['expires'] = $token['expires']->getTimestamp(); - } - - return $token; - } - - /** - * @param string $oauthToken - * @param mixed $clientIdentifier - * @param mixed $user_id - * @param int $expires - * @param null $scope - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function setAccessToken($oauthToken, $clientIdentifier, $user_id, $expires, $scope = null) - { - $client = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthClient') - ->findOneBy(['client_identifier' => $clientIdentifier]); - - $user = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthUser') - ->findOneBy(['id' => $user_id]); - - $client_id = $client->getId(); - - $token = OAuthAccessToken::fromArray( - [ - 'token' => $oauthToken, - 'client_id' => $client_id, - 'user_id' => $user_id, - 'expires' => (new \DateTime())->setTimestamp($expires), - 'scope' => $scope, - 'user' => $user, - 'client' => $client, - ] - ); - - $this->_em->persist($token); - $this->_em->flush(); - } - - /** - * Delete a row - * - * @param string $token - * @return bool - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function expireToken($token): bool - { - $token = $this->findOneBy(['token' => $token]); - - if (!empty($token)) { - $ts = time(); - - $datetime = new \DateTime(); - $datetime->setTimestamp($ts); - - $token->setExpires($datetime); - - $this->_em->merge($token); - - return $this->_em->flush(); - } - - throw new \RuntimeException('No Token Found.'); - } - -} diff --git a/core/modules/Users/Storage/OAuthAuthorizationCodeStorage.php b/core/modules/Users/Storage/OAuthAuthorizationCodeStorage.php deleted file mode 100644 index d196d519c..000000000 --- a/core/modules/Users/Storage/OAuthAuthorizationCodeStorage.php +++ /dev/null @@ -1,82 +0,0 @@ -findOneBy(['code' => $code]); - - if ($authCode) { - $authCode = $authCode->toArray(); - $authCode['expires'] = $authCode['expires']->getTimestamp(); - } - - return $authCode; - } - - /** - * @param string $code - * @param mixed $client_id - * @param mixed $user_id - * @param string $redirect_uri - * @param int $expires - * @param null $scope - * @param null $id_token - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function setAuthorizationCode( - $code, - $client_id, - $user_id, - $redirect_uri, - $expires, - $scope = null, - $id_token = null - ) { - $client = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthClient') - ->findOneBy(['client_identifier' => $client_id]); - - $user = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthUser') - ->findOneBy(['user_name' => $user_id]); - - $authCode = OAuthAuthorizationCode::fromArray( - [ - 'code' => $code, - 'client' => $client, - 'user' => $user, - 'redirect_uri' => $redirect_uri, - 'expires' => (new \DateTime())->setTimestamp($expires), - 'scope' => $scope, - 'id_token' => $id_token - ] - ); - - $this->_em->persist($authCode); - $this->_em->flush(); - } - - /** - * @param $code - * @throws \Doctrine\ORM\ORMException - * @throws \Doctrine\ORM\OptimisticLockException - */ - public function expireAuthorizationCode($code) - { - $authCode = $this->findOneBy(['code' => $code]); - $this->_em->remove($authCode); - $this->_em->flush(); - } -} diff --git a/core/modules/Users/Storage/OAuthClientStorage.php b/core/modules/Users/Storage/OAuthClientStorage.php deleted file mode 100644 index bbfbc5538..000000000 --- a/core/modules/Users/Storage/OAuthClientStorage.php +++ /dev/null @@ -1,102 +0,0 @@ -getEntity($client); - - if (empty($clientEntity->getId())) { - $this->_em->persist($clientEntity); - } else { - $this->_em->merge($clientEntity); - } - - $this->_em->flush(); - } - - /** - * @param $clientIdentifier - * @return array|object|null - */ - public function getClientDetails($clientIdentifier) - { - $client = $this->findOneBy(['client_identifier' => $clientIdentifier]); - if ($client) { - $client = $client->toArray(); - } - - return $client; - } - - /** - * @param $clientIdentifier - * @param null $clientSecret - * @return bool - */ - public function checkClientCredentials($clientIdentifier, $clientSecret = null) - { - $client = $this->findOneBy(['client_identifier' => $clientIdentifier]); - if ($client) { - return $client->verifyClientSecret($clientSecret); - } - - return false; - } - - /** - * @param $clientId - * @param $grantType - * @return bool - */ - public function checkRestrictedGrantType($clientId, $grantType) - { - // we do not support different grant types per client in this example - return true; - } - - /** - * @param $clientId - * @return bool - */ - public function isPublicClient($clientId) - { - return false; - } - - /** - * @param $clientId - * @return null |null - */ - public function getClientScope($clientId) - { - return null; - } - - /** - * Get Contact Entity - * - * @param array $entityData - * @return \Mvc\Entity\Contact - * @throws \Exception - */ - public function getEntity($entityData = []): \Mvc\Entity\Contact - { - return new OAuthClient($entityData); - } - -} diff --git a/core/modules/Users/Storage/OAuthPublicKeyStorage.php b/core/modules/Users/Storage/OAuthPublicKeyStorage.php deleted file mode 100644 index 32ccb898b..000000000 --- a/core/modules/Users/Storage/OAuthPublicKeyStorage.php +++ /dev/null @@ -1,33 +0,0 @@ -findOneBy(['refresh_token' => $refreshToken]); - - if ($refreshToken) { - $refreshToken = $refreshToken->toArray(); - $refreshToken['expires'] = $refreshToken['expires']->getTimestamp(); - } - - return $refreshToken; - } - - /** - * @param $refreshToken - * @param $clientIdentifier - * @param $user_id - * @param $expires - * @param null $scope - * @throws ORMException - * @throws OptimisticLockException - */ - public function setRefreshToken($refreshToken, $clientIdentifier, $user_id, $expires, $scope = null) - { - $client = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthClient') - ->findOneBy(['client_identifier' => $clientIdentifier]); - - $client_id = $client->getId(); - - $user = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\OAuthUser') - ->findOneBy(['id' => $user_id]); - - $refreshToken = OAuthRefreshToken::fromArray( - [ - 'refresh_token' => $refreshToken, - 'client' => $client, - 'user' => $user, - 'expires' => (new \DateTime())->setTimestamp($expires), - 'scope' => $scope, - 'client_id' => $client_id, - 'user_id' => $user_id, - ] - ); - - $this->_em->persist($refreshToken); - $this->_em->flush(); - } - - /** - * @param $refreshToken - * @throws ORMException - * @throws OptimisticLockException - */ - public function unsetRefreshToken($refreshToken) - { - $refreshToken = $this->findOneBy(['refresh_token' => $refreshToken]); - $this->_em->remove($refreshToken); - $this->_em->flush(); - } - - /** - * Delete a row - * - * @param string $token - * @return bool - * @throws ORMException - * @throws OptimisticLockException - */ - public function expireToken($token): bool - { - $token = $this->findOneBy(['refresh_token' => $token]); - - if (!empty($token)) { - $ts = time(); - - $datetime = new \DateTime(); - $datetime->setTimestamp($ts); - - $token->setExpires($datetime); - - $this->_em->merge($token); - - return $this->_em->flush(); - } - - throw new \RuntimeException('No Token Found.'); - } -} diff --git a/core/modules/Users/Storage/OAuthUserClaimsStorage.php b/core/modules/Users/Storage/OAuthUserClaimsStorage.php deleted file mode 100644 index 1edf1acdf..000000000 --- a/core/modules/Users/Storage/OAuthUserClaimsStorage.php +++ /dev/null @@ -1,80 +0,0 @@ -getUserDetails($user_id)) { - return false; - } - - $claims = explode(' ', trim($claims)); - - $userClaims = []; - // for each requested claim, if the user has the claim, set it in the response - $validClaims = explode(' ', self::VALID_CLAIMS); - - foreach ($validClaims as $validClaim) { - if (in_array($validClaim, $claims, true)) { - if ($validClaim == 'address') { - // address is an object with subfields - $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails); - } else { - $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails)); - } - } - } - - return $userClaims; - } - - /** - * @param $claim - * @param $userDetails - * @return array - */ - protected function getUserClaim($claim, $userDetails) - { - $userClaims = []; - $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim))); - $claimValues = explode(' ', $claimValuesString); - foreach ($claimValues as $value) { - $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null; - } - - return $userClaims; - } - - /** - * @param $username - * @return array|bool - */ - public function getUserDetails($username) - { - if (!isset($this->userCredentials[$username])) { - return false; - } - - return array_merge( - [ - 'user_id' => $username, - 'password' => null, - 'first_name' => null, - 'last_name' => null, - ], - $this->userCredentials[$username] - ); - } -} diff --git a/core/modules/Users/Storage/OAuthUserStorage.php b/core/modules/Users/Storage/OAuthUserStorage.php deleted file mode 100644 index b72b31a6d..000000000 --- a/core/modules/Users/Storage/OAuthUserStorage.php +++ /dev/null @@ -1,68 +0,0 @@ -findOneBy(['user_name' => $username]); -// -// if ($user) { -// return $user->verifyPassword($password); -// } -// -// return false; - - return true; - } - - /** - * @param $username - * @return object|null ARRAY the associated "user_id" and optional "scope" values - * ARRAY the associated "user_id" and optional "scope" values - * This function MUST return FALSE if the requested user does not exist or is - * invalid. "scope" is a space-separated list of restricted scopes. - * @code - * return array( - * "user_id" => USER_ID, // REQUIRED user_id to be stored with the authorization code or access token - * "scope" => SCOPE // OPTIONAL space-separated list of restricted scopes - * ); - * @endcode - */ - public function getUserDetails($username) - { - $user = $this->findOneBy(['username' => $username]); - - if ($user) { - $user = $user->toArray(); - } - - return $user; - } - -// public function setSessionId($accesstoken, $session_id) -// { -// $tokenEntity = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\oAuthAccessToken') -// ->findOneBy(['token' => $accesstoken]); -// -// $userId = $tokenEntity->getUserId(); -// -// $userEntity = $this->_em->getRepository('SuiteCRM\Core\Modules\Users\Entity\oAuthUser') -// ->findOneBy(['id' => $userId]); -// -// $userEntity->setSessionId($session_id); -// -// $this->_em->merge($userEntity); -// -// $this->_em->flush(); -// } -} diff --git a/core/modules/Users/Users.php b/core/modules/Users/Users.php deleted file mode 100644 index f5ec6590d..000000000 --- a/core/modules/Users/Users.php +++ /dev/null @@ -1,24 +0,0 @@ -template->get('template/default.json'); diff --git a/core/modules/Administration/Cli/App/AppRebuildCommand.php b/core/src/Command/AppRebuildCommand.php similarity index 73% rename from core/modules/Administration/Cli/App/AppRebuildCommand.php rename to core/src/Command/AppRebuildCommand.php index cd03da973..a319b2eb3 100644 --- a/core/modules/Administration/Cli/App/AppRebuildCommand.php +++ b/core/src/Command/AppRebuildCommand.php @@ -1,38 +1,70 @@ config = $config; - $this->file = new File(); + $this->file = new Filesystem(); + $this->projectDir = $projectDir; + $this->logger = $logger; } protected function configure(): void { $this - ->setName('app:rebuild') ->setDescription('Rebuild the application') ->setHelp('This command will rebuild the Application and Plugins') ->addOption( @@ -51,35 +83,42 @@ class AppRebuildCommand extends SuiteCommand */ public function execute(InputInterface $input, OutputInterface $output) { - $optionValue = $input->getOption('hard'); $hardRebuild = ($optionValue !== false); $optionValue = $input->getOption('verbose'); $verboseOutput = ($optionValue !== false); - $rebuildPath = BASE_PATH . 'cache/app'; + $filesystem = new Filesystem(); - $this->file->makeDir($rebuildPath, 0755); + $rebuildPath = $this->projectDir . '/cache/app'; + + try { + $filesystem->mkdir($rebuildPath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while creating your directory at ' . $exception->getPath(); + } $rebuildEnginePath = $rebuildPath . '/engine'; - $this->file->makeDir($rebuildEnginePath, 0755); + try { + $filesystem->mkdir($rebuildEnginePath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while creating your directory at ' . $exception->getPath(); + } - $appPath = BASE_PATH . 'core/app/'; - $enginePath = $appPath . 'engine'; - $themesPath = BASE_PATH . 'core/app/themes'; + $appPath = $this->projectDir . '/core/app/'; + $enginePath = $appPath . '/engine'; + + $themesPath = $this->projectDir . '/core/app/themes'; $assetsPath = $rebuildPath . '/engine/src/assets/themes/'; $appFilesPath = [ - 'fields' => $appPath . 'fields', - 'ui' => $appPath . 'ui', - 'views' => $appPath . 'views' + 'fields' => $appPath . '/fields', + 'ui' => $appPath . '/ui', + 'views' => $appPath . '/views' ]; - // Get modules path - $modulesPath = APP_PATH; - // Field components $fields = []; @@ -93,37 +132,57 @@ class AppRebuildCommand extends SuiteCommand $uiFilesPath = $rebuildEnginePath . '/src/app/app-files'; // Delete ui stored files - chmod($rebuildPath, 0755); + $filesystem->chmod($rebuildPath, 0775, 0000, true); - if (!$this->file->deleteDirectory($rebuildEnginePath)) { - throw new \RuntimeException('System can\'t delete cached application engine files'); + try { + $filesystem->remove($rebuildEnginePath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while deleting directory at ' . $exception->getPath(); } - if ($hardRebuild && !$this->file->deleteDirectory(BASE_PATH . '/node_modules')) { - throw new \RuntimeException('System can\'t delete node_modules'); + if ($hardRebuild) { + try { + $filesystem->remove($rebuildEnginePath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while deleting directory at ' . $exception->getPath(); + } } - // Copy all engine files to rebuild path - $this->file->recurseCopy($enginePath, $rebuildEnginePath); + try { + $filesystem->mirror($enginePath, $rebuildEnginePath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while copying directory at ' . $exception->getPath(); + } - // Copy all theme files to assets path - $this->file->recurseCopy($themesPath, $assetsPath); + try { + $filesystem->mirror($themesPath, $assetsPath); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while copying directory at ' . $exception->getPath(); + } - // Copy all core app files to ui app-files + // mirror all core app files to ui app-files foreach ($appFilesPath as $dir => $path) { - if (!file_exists($uiFilesPath . '/' . $dir) && !mkdir( - $concurrentDirectory = $uiFilesPath . '/' . $dir, - 0755, - true - ) && !is_dir($concurrentDirectory)) { - throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory)); + + if (!file_exists($uiFilesPath . '/' . $dir)) { + try { + $filesystem->mkdir($uiFilesPath . '/' . $dir, 0755); + } catch (IOExceptionInterface $exception) { + echo 'An error occurred while creating your directory at ' . $exception->getPath(); + } } - $this->file->recurseCopy($path . '/', $uiFilesPath . '/' . $dir); + $filesystem->mirror($path . '/', $uiFilesPath . '/' . $dir); } // Find all Ng components - $ngComponents = $this->file->findFiles($uiFilesPath . '/', '/(.*).component.ts/'); + $finder = new Finder(); + $finder->name('*.component.ts')->in($uiFilesPath . '/*'); + + $ngComponents = []; + + foreach ($finder as $file) { + $ngComponents[] = $absoluteFilePath = $file->getRealPath(); + } $componentList = ''; $moduleList = ''; @@ -135,6 +194,7 @@ class AppRebuildCommand extends SuiteCommand $fullComponentName = ''; $pos = strrpos($filepath, '/'); + $pathLength = (strlen($filepath) - 1); if ($pathLength > $pos) { @@ -159,6 +219,7 @@ class AppRebuildCommand extends SuiteCommand $ufComponentName = implode('', array_map('ucfirst', explode('-', $componentName))); $fullComponentName = $ufComponentName . $ufViewName . $ufType . 'Component'; + $fullModuleName = $ufComponentName . $ufViewName . $ufType . 'Module'; $appManagerPath = '../../../../../app-manager/app-manager.module'; @@ -181,7 +242,6 @@ class AppRebuildCommand extends SuiteCommand $appManagerPath = '../../../../app-manager/app-manager.module'; $componentFileName = str_replace('.ts', '', $componentFileName); - //$componentImportList .= "import { " . $fullComponentName . " } from '../app-files/ui/components/" . $componentName . "/" . $componentFileName . "'; \n"; $moduleImportList .= 'import { ' . $fullModuleName . " } from '../app-files/ui/components/" . $componentName . '/' . $componentName . ".module'; \n"; } elseif ($type === 'views') { // Placeholder for view components @@ -323,7 +383,7 @@ EOT; $appDir = getcwd(); // If node_modules isn't present of --hard was option - run npm install - if (!file_exists( BASE_PATH . '/node_modules')) { + if (!file_exists($this->projectDir . '/node_modules')) { echo "Updating npm...\n\n"; $npmCmd = 'npm update'; shell_exec($npmCmd); @@ -341,10 +401,10 @@ EOT; shell_exec($npmCmd); } - $compileThemeCommand = $this->getApplication()->find('app:theme:rebuild'); + $compileThemeCommand = $this->getApplication()->find('suitecrm:app:theme:rebuild'); $arguments = [ - 'command' => 'app:theme:rebuild' + 'command' => 'suitecrm:app:theme:rebuild' ]; $compileThemeInput = new ArrayInput($arguments); @@ -353,12 +413,13 @@ EOT; $cmd = 'ng build --deploy-url public/'; shell_exec($cmd); + chdir($appDir); if (file_exists($rebuildEnginePath . '/dist/')) { - $this->file->makeDir(BASE_PATH . 'public/', 0755); - $this->file->deleteDirectory(BASE_PATH . 'public/'); - $this->file->recurseCopy($rebuildEnginePath . '/dist/', BASE_PATH . 'public/'); + $filesystem->mkdir($this->projectDir . '/public/', 0755); + $filesystem->remove($this->projectDir . '/public/'); + $filesystem->mirror($rebuildEnginePath . '/dist/', $this->projectDir . '/public/'); } return true; diff --git a/core/modules/Administration/Cli/App/AppThemeRebuildCommand.php b/core/src/Command/AppThemeRebuildCommand.php similarity index 57% rename from core/modules/Administration/Cli/App/AppThemeRebuildCommand.php rename to core/src/Command/AppThemeRebuildCommand.php index a9f2112c3..45de8ab6a 100644 --- a/core/modules/Administration/Cli/App/AppThemeRebuildCommand.php +++ b/core/src/Command/AppThemeRebuildCommand.php @@ -1,41 +1,59 @@ config = $config; + parent::__construct($name); + $this->projectDir = $projectDir; + $this->logger = $logger; } /** * @param InputInterface $input * @param OutputInterface $output * @return void - * @throws \Exception + * @throws Exception */ - public function execute(InputInterface $input, OutputInterface $output) { - if (!file_exists(BASE_PATH . '/cache/app/engine/')) { - throw new \RuntimeException( + if (!file_exists($this->projectDir . '/cache/app/engine/')) { + throw new RuntimeException( "Can't find application engine folder, Please run bin/console app:rebuild" ); } @@ -48,10 +66,10 @@ class AppThemeRebuildCommand extends SuiteCommand $watchCompiler = '--watch'; } - chdir(BASE_PATH . '/cache/app/engine/'); + chdir($this->projectDir . '/cache/app/engine/'); shell_exec( - "../../../node_modules/.bin/node-sass $watchCompiler --output-style compressed src/assets/themes/suite8/css/style.scss > src/assets/themes/suite8/css/style.min.css" + $this->projectDir . "/node_modules/.bin/node-sass $watchCompiler --output-style compressed src/assets/themes/suite8/css/style.scss > src/assets/themes/suite8/css/style.min.css" ); $compiledThemeDir = 'src/assets/themes/*/css/'; @@ -60,7 +78,7 @@ class AppThemeRebuildCommand extends SuiteCommand $compiledFilesCheck = shell_exec("find $compiledThemeDir -name '$compiledThemeFile' -print"); if ($compiledFilesCheck === null) { - throw new \RuntimeException( + throw new RuntimeException( 'Compiled theme files have failed to create. Check that the SuiteCRM 8 source theme files exist.' ); } @@ -69,7 +87,6 @@ class AppThemeRebuildCommand extends SuiteCommand protected function configure(): void { $this - ->setName('app:theme:rebuild') ->setDescription('Rebuild the theme') ->setHelp('This command will rebuild the theme') ->addOption( diff --git a/config/.gitkeep b/core/src/Controller/.gitignore similarity index 100% rename from config/.gitkeep rename to core/src/Controller/.gitignore diff --git a/core/src/DataFixtures/AppFixtures.php b/core/src/DataFixtures/AppFixtures.php new file mode 100644 index 000000000..fece4758e --- /dev/null +++ b/core/src/DataFixtures/AppFixtures.php @@ -0,0 +1,17 @@ +persist($product); + + $manager->flush(); + } +} diff --git a/core/src/DataProvider/NavbarItemDataProvider.php b/core/src/DataProvider/NavbarItemDataProvider.php new file mode 100644 index 000000000..175bf58a3 --- /dev/null +++ b/core/src/DataProvider/NavbarItemDataProvider.php @@ -0,0 +1,30 @@ +userID = 1; + $output->NonGroupedTabs = $navbarData->getNonGroupedNavTabs(); + $output->groupedTabs = $navbarData->getGroupedNavTabs(); + $output->userActionMenu = $navbarData->getUserActionMenu(); + return $output; + } +} diff --git a/core/src/Entity/Navbar.php b/core/src/Entity/Navbar.php new file mode 100644 index 000000000..8de0ee234 --- /dev/null +++ b/core/src/Entity/Navbar.php @@ -0,0 +1,39 @@ +environment; + } + + /** + * @return string + */ + public function getLogDir(): string + { + return dirname(__DIR__, 2) . '/logs/' . $this->environment; + } + + /** + * @return iterable + */ + public function registerBundles(): iterable + { + $contents = require dirname(__DIR__, 2) . '/config/bundles.php'; + foreach ($contents as $class => $envs) { + if ($envs[$this->environment] ?? $envs['all'] ?? false) { + yield new $class(); + } + } + } + + /** + * @param ContainerBuilder $container + * @param LoaderInterface $loader + * @throws Exception + */ + protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void + { + $container->addResource(new FileResource(dirname(__DIR__, 2) . '/config/bundles.php')); + $container->setParameter('container.dumper.inline_class_loader', true); + $confDir = dirname(__DIR__, 2) . '/config'; + $loader->load($confDir . '/{packages}/*' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{packages}/' . $this->environment . '/*' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{services}' . self::CONFIG_EXTS, 'glob'); + $loader->load($confDir . '/{services}_' . $this->environment . self::CONFIG_EXTS, 'glob'); + } + + /** + * @param RouteCollectionBuilder $routes + * @throws LoaderLoadException + */ + protected function configureRoutes(RouteCollectionBuilder $routes): void + { + $confDir = dirname(__DIR__, 2) . '/config'; + $routes->import($confDir . '/{routes}/' . $this->environment . '/*' . self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob'); + $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob'); + } +} diff --git a/core/src/Repository/.gitignore b/core/src/Repository/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/index.php b/index.php old mode 100755 new mode 100644 index 5ae6306c0..c3f465309 --- a/index.php +++ b/index.php @@ -1,6 +1,27 @@ loadFiles( - [ - BASE_PATH . '/config/config.yml', - BASE_PATH . '/core/base/Config/modules.config.yml', - BASE_PATH . '/core/base/Config/services.config.yml', - ] - ); -} catch (Exception $e) { - trigger_error('Config failed to load files: ' . $e); -} - -$request = new SuiteCRM\Core\Base\Http\Request( - $_GET, - $_POST, - [], - $_COOKIE, - $_FILES, - $_SERVER -); - -$response = new SuiteCRM\Core\Base\Http\Response(); -$fileHelper = new SuiteCRM\Core\Base\Helper\File\File(); - -$moduleManager = new SuiteCRM\Core\Base\Module\Manager($configParameters, $fileHelper); -$router = new SuiteCRM\Core\Base\Route\DefaultRouter($request, $configParameters); -try { - $route = $router->load(); -} catch (Exception $e) { - trigger_error('Router failed to load: ' . $e); -} - -// Create an Instance of SuiteCRM -$instance = new SuiteCRM\Core\Base\Instance($configParameters, $route, $moduleManager); - -// Run the Application -$route = $instance->run()->getRoute(); - -$view = new SuiteCRM\Core\Base\Module\View\Handler(); - -$serviceMapper = new SuiteCRM\Core\Base\Module\Service\ServiceMapper($fileHelper, $moduleManager, $configParameters); - -$services = $serviceMapper->getAllServices(); - -$controller = new $route->controller($configParameters, $request, $response, $view, $services); - -$customController = 'Custom\\' . $route->controller; - -// Check the custom -if (class_exists($customController)) { - $controller = new $customController(); -} - -$params = []; - -call_user_func_array([$controller, $route->action], $params); +$kernel = new Kernel($_SERVER['APP_ENV'], (bool)$_SERVER['APP_DEBUG']); +$request = Request::createFromGlobals(); +$response = $kernel->handle($request); +$response->send(); +$kernel->terminate($request, $response); diff --git a/package-lock.json b/package-lock.json index 992094a88..c04c32527 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1088,9 +1088,9 @@ } }, "@types/chart.js": { - "version": "2.9.7", - "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.7.tgz", - "integrity": "sha512-T+oRIWLPu6cXWYSTwihkeZLKk5V4U4O09Uqx4padQto1XVH7YafX4Z4YV1OIWnKbkqMn/4Cuj9ZwWcG6fnKK3A==" + "version": "2.9.8", + "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.8.tgz", + "integrity": "sha512-7mL20QxLkU3EjWw8IgjWW+guzMfegPKtde6OcyDmNpe9aWvj3lfFC3PKQPkhzhTdbsRAN1g1Guso1MW7x1d7ig==" }, "@types/jasmine": { "version": "3.5.0", @@ -3045,9 +3045,9 @@ } }, "core-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.0.tgz", - "integrity": "sha512-AHPTNKzyB+YwgDWoSOCaid9PUSEF6781vsfiK8qUz62zRR448/XgK2NtCbpiUGizbep8Lrpt0Du19PpGGZvw3Q==" + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.2.tgz", + "integrity": "sha512-hIE5dXkRzRvnZ5vhkRfQxUvDxQZmD9oueA08jDYRBKJHx+VIl/Pne/e0A4x9LObEEthC/TqiZybUoNM4tRgnKg==" }, "core-util-is": { "version": "1.0.2", @@ -9289,9 +9289,9 @@ } }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "requires": { "tslib": "^1.9.0" } diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 000000000..e4aab3c59 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,27 @@ + + + + + + + + + + + + + tests + + + + + + src + + + diff --git a/symfony.lock b/symfony.lock new file mode 100644 index 000000000..adb05f222 --- /dev/null +++ b/symfony.lock @@ -0,0 +1,554 @@ +{ + "api-platform/api-pack": { + "version": "v1.2.1" + }, + "api-platform/core": { + "version": "2.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.5", + "ref": "a93061567140e386f107be75340ac2aee3f86cbf" + }, + "files": [ + "config/packages/api_platform.yaml", + "config/routes/api_platform.yaml", + "src/Entity/.gitignore" + ] + }, + "bshaffer/oauth2-server-httpfoundation-bridge": { + "version": "v1.4" + }, + "bshaffer/oauth2-server-php": { + "version": "v1.11.1" + }, + "dama/doctrine-test-bundle": { + "version": "4.0", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "master", + "version": "4.0", + "ref": "56eaa387b5e48ebcc7c95a893b47dfa1ad51449c" + }, + "files": [ + "config/packages/test/dama_doctrine_test_bundle.yaml" + ] + }, + "doctrine/annotations": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "cb4152ebcadbe620ea2261da1a1c5a9b8cea7672" + }, + "files": [ + "config/routes/annotations.yaml" + ] + }, + "doctrine/cache": { + "version": "1.10.0" + }, + "doctrine/collections": { + "version": "1.6.4" + }, + "doctrine/common": { + "version": "v2.11.0" + }, + "doctrine/data-fixtures": { + "version": "1.4.0" + }, + "doctrine/dbal": { + "version": "v2.10.0" + }, + "doctrine/doctrine-bundle": { + "version": "2.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.0", + "ref": "a9f2463b9f73efe74482f831f03a204a41328555" + }, + "files": [ + "config/packages/doctrine.yaml", + "config/packages/prod/doctrine.yaml", + "core/base/src/Entity/.gitignore", + "core/base/src/Repository/.gitignore" + ] + }, + "doctrine/doctrine-fixtures-bundle": { + "version": "3.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.0", + "ref": "fc52d86631a6dfd9fdf3381d0b7e3df2069e51b3" + }, + "files": [ + "core/base/src/DataFixtures/AppFixtures.php" + ] + }, + "doctrine/event-manager": { + "version": "1.1.0" + }, + "doctrine/inflector": { + "version": "1.3.1" + }, + "doctrine/instantiator": { + "version": "1.3.0" + }, + "doctrine/lexer": { + "version": "1.2.0" + }, + "doctrine/orm": { + "version": "v2.6.6" + }, + "doctrine/persistence": { + "version": "1.3.3" + }, + "doctrine/reflection": { + "version": "v1.0.0" + }, + "ecodev/graphql-upload": { + "version": "4.0.0" + }, + "fig/link-util": { + "version": "1.1.0" + }, + "jdorn/sql-formatter": { + "version": "v1.2.17" + }, + "lcobucci/jwt": { + "version": "3.3.1" + }, + "lexik/jwt-authentication-bundle": { + "version": "2.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "2.5", + "ref": "5b2157bcd5778166a5696e42f552ad36529a07a6" + }, + "files": [ + "config/packages/lexik_jwt_authentication.yaml" + ] + }, + "monolog/monolog": { + "version": "1.25.3" + }, + "mouf/classname-mapper": { + "version": "v1.0.2" + }, + "myclabs/deep-copy": { + "version": "1.9.4" + }, + "namshi/jose": { + "version": "7.2.3" + }, + "nelmio/cors-bundle": { + "version": "1.5", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.5", + "ref": "6388de23860284db9acce0a7a5d9d13153bcb571" + }, + "files": [ + "config/packages/nelmio_cors.yaml" + ] + }, + "nikic/php-parser": { + "version": "v4.3.0" + }, + "phar-io/manifest": { + "version": "1.0.3" + }, + "phar-io/version": { + "version": "2.0.1" + }, + "php": { + "version": "7.2.0" + }, + "phpdocumentor/reflection-common": { + "version": "1.0.1" + }, + "phpdocumentor/reflection-docblock": { + "version": "4.3.4" + }, + "phpdocumentor/type-resolver": { + "version": "0.4.0" + }, + "phploc/phploc": { + "version": "4.0.1" + }, + "phpmetrics/phpmetrics": { + "version": "v2.5.0" + }, + "phpspec/prophecy": { + "version": "1.10.1" + }, + "phpunit/php-code-coverage": { + "version": "6.1.4" + }, + "phpunit/php-file-iterator": { + "version": "2.0.2" + }, + "phpunit/php-text-template": { + "version": "1.2.1" + }, + "phpunit/php-timer": { + "version": "2.1.2" + }, + "phpunit/php-token-stream": { + "version": "3.1.1" + }, + "phpunit/phpunit": { + "version": "4.7", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.7", + "ref": "f1546d78502f904f37f7b47a42b1444cbf1d3423" + }, + "files": [ + ".env.test", + "phpunit.xml.dist", + "config/bootstrap.php", + "tests/.gitignore" + ] + }, + "pimple/pimple": { + "version": "v3.2.3" + }, + "psr/cache": { + "version": "1.0.1" + }, + "psr/container": { + "version": "1.0.0" + }, + "psr/http-message": { + "version": "1.0.1" + }, + "psr/http-server-handler": { + "version": "1.0.1" + }, + "psr/http-server-middleware": { + "version": "1.0.1" + }, + "psr/link": { + "version": "1.0.0" + }, + "psr/log": { + "version": "1.1.2" + }, + "psr/simple-cache": { + "version": "1.0.1" + }, + "roave/security-advisories": { + "version": "dev-master" + }, + "sebastian/code-unit-reverse-lookup": { + "version": "1.0.1" + }, + "sebastian/comparator": { + "version": "3.0.2" + }, + "sebastian/diff": { + "version": "3.0.2" + }, + "sebastian/environment": { + "version": "4.2.3" + }, + "sebastian/exporter": { + "version": "3.1.2" + }, + "sebastian/finder-facade": { + "version": "1.2.2" + }, + "sebastian/global-state": { + "version": "2.0.0" + }, + "sebastian/object-enumerator": { + "version": "3.0.3" + }, + "sebastian/object-reflector": { + "version": "1.1.1" + }, + "sebastian/recursion-context": { + "version": "3.0.0" + }, + "sebastian/resource-operations": { + "version": "2.0.1" + }, + "sebastian/version": { + "version": "2.0.1" + }, + "symfony/asset": { + "version": "v4.4.2" + }, + "symfony/cache": { + "version": "v4.4.2" + }, + "symfony/cache-contracts": { + "version": "v1.1.7" + }, + "symfony/config": { + "version": "v4.4.2" + }, + "symfony/console": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "fead3ab2e80622c61d13dac0d21a3430a45efae8" + }, + "files": [ + "bin/console", + "config/bootstrap.php" + ] + }, + "symfony/debug": { + "version": "v4.4.2" + }, + "symfony/dependency-injection": { + "version": "v4.4.2" + }, + "symfony/doctrine-bridge": { + "version": "v4.4.2" + }, + "symfony/dotenv": { + "version": "v4.4.2" + }, + "symfony/error-handler": { + "version": "v4.4.2" + }, + "symfony/event-dispatcher": { + "version": "v4.4.2" + }, + "symfony/event-dispatcher-contracts": { + "version": "v1.1.7" + }, + "symfony/expression-language": { + "version": "v4.4.2" + }, + "symfony/filesystem": { + "version": "v4.4.2" + }, + "symfony/finder": { + "version": "v4.4.2" + }, + "symfony/flex": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" + }, + "files": [ + ".env" + ] + }, + "symfony/framework-bundle": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "23ecaccc551fe2f74baf613811ae529eb07762fa" + }, + "files": [ + "config/bootstrap.php", + "config/packages/cache.yaml", + "config/packages/framework.yaml", + "config/packages/test/framework.yaml", + "config/routes/dev/framework.yaml", + "config/services.yaml", + "public/index.php", + "core/base/src/Controller/.gitignore", + "core/base/src/Kernel.php" + ] + }, + "symfony/http-foundation": { + "version": "v4.4.2" + }, + "symfony/http-kernel": { + "version": "v4.4.2" + }, + "symfony/inflector": { + "version": "v4.4.2" + }, + "symfony/lock": { + "version": "v4.4.2" + }, + "symfony/maker-bundle": { + "version": "1.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "1.0", + "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" + } + }, + "symfony/mime": { + "version": "v4.4.2" + }, + "symfony/monolog-bridge": { + "version": "v4.4.2" + }, + "symfony/monolog-bundle": { + "version": "3.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "3.3", + "ref": "6240c6d43e8237a32452f057f81816820fd56ab6" + }, + "files": [ + "config/packages/dev/monolog.yaml", + "config/packages/prod/monolog.yaml", + "config/packages/test/monolog.yaml" + ] + }, + "symfony/polyfill-ctype": { + "version": "v1.13.1" + }, + "symfony/polyfill-intl-idn": { + "version": "v1.13.1" + }, + "symfony/polyfill-mbstring": { + "version": "v1.13.1" + }, + "symfony/polyfill-php56": { + "version": "v1.13.1" + }, + "symfony/polyfill-php72": { + "version": "v1.13.1" + }, + "symfony/polyfill-php73": { + "version": "v1.13.1" + }, + "symfony/polyfill-util": { + "version": "v1.13.1" + }, + "symfony/property-access": { + "version": "v4.4.2" + }, + "symfony/property-info": { + "version": "v4.4.2" + }, + "symfony/routing": { + "version": "4.2", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.2", + "ref": "683dcb08707ba8d41b7e34adb0344bfd68d248a7" + }, + "files": [ + "config/packages/prod/routing.yaml", + "config/packages/routing.yaml", + "config/routes.yaml" + ] + }, + "symfony/security-bundle": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "30efd98dd3b4ead6e9ad4713b1efc43bbe94bf77" + }, + "files": [ + "config/packages/security.yaml" + ] + }, + "symfony/security-core": { + "version": "v4.4.2" + }, + "symfony/security-csrf": { + "version": "v4.4.2" + }, + "symfony/security-guard": { + "version": "v4.4.2" + }, + "symfony/security-http": { + "version": "v4.4.2" + }, + "symfony/serializer": { + "version": "v4.4.2" + }, + "symfony/service-contracts": { + "version": "v1.1.8" + }, + "symfony/translation-contracts": { + "version": "v1.1.7" + }, + "symfony/twig-bridge": { + "version": "v4.4.2" + }, + "symfony/twig-bundle": { + "version": "4.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.4", + "ref": "15a41bbd66a1323d09824a189b485c126bbefa51" + }, + "files": [ + "config/packages/test/twig.yaml", + "config/packages/twig.yaml", + "templates/base.html.twig" + ] + }, + "symfony/validator": { + "version": "4.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "master", + "version": "4.3", + "ref": "d902da3e4952f18d3bf05aab29512eb61cabd869" + }, + "files": [ + "config/packages/test/validator.yaml", + "config/packages/validator.yaml" + ] + }, + "symfony/var-dumper": { + "version": "v4.4.2" + }, + "symfony/var-exporter": { + "version": "v4.4.2" + }, + "symfony/web-link": { + "version": "v4.4.2" + }, + "symfony/yaml": { + "version": "v4.4.2" + }, + "thecodingmachine/class-explorer": { + "version": "v1.0.2" + }, + "thecodingmachine/graphqlite": { + "version": "v3.1.1" + }, + "theseer/fdomdocument": { + "version": "1.6.6" + }, + "theseer/tokenizer": { + "version": "1.1.3" + }, + "twig/twig": { + "version": "v2.12.3" + }, + "webmozart/assert": { + "version": "1.6.0" + }, + "webonyx/graphql-php": { + "version": "v0.13.8" + }, + "willdurand/negotiation": { + "version": "v2.3.1" + } +} diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 000000000..e69de29bb