{('welcome' === this.state.navigation) && response.json()) - .then(this.handleNewReport) + .then(() => this.getContentUpdate()) + .then(() => this.pollBackgroundWorker()) + .then(() => this.getReport()) // update iframe height on resize window.addEventListener("resize", this.resizeFrame); @@ -135,6 +154,22 @@ class App extends React.Component { this.resizeFrame(); } + getReport() { + if(this.state.scanCompleted === true) { + this.getLatestReport() + .then((response) => response.json()) + .then(this.handleNewReport) + } + else { + setTimeout(this.getReport, 500); + } + } + + getLatestReport() { + let api = new Api(this.settings) + return api.getLatestReport(this.settings.course.id) + } + componentWillUnmount() { window.removeEventListener('resize', this.resizeFrame); } @@ -154,14 +189,88 @@ class App extends React.Component { handleCourseRescan() { if (this.state.hasNewReport) { - this.setState({ hasNewReport: false, syncComplete: false }) + this.setState({hasNewReport: false, + syncComplete: false, + contentUpdateCompleted: false, + scanCompleted: false, + progress: 0}) this.scanCourse() .then((response) => response.json()) - .then(this.handleNewReport) + .then(() => this.getContentUpdate()) + .then(() => this.pollBackgroundWorker()) + .then(() => this.getReport()) } this.forceUpdate() } + // As the worker process updates UDOIT with the latest content items, this method checks on whether or not + // This process has been completed + fetchUpdateData() { + fetch(`/udoit3/api/progress`) + .then(response => response.json()) + .then(data => { + this.setState({ + progress: data.progress, + title: data.title + }, () => { + const progress = this.state.progress + const interval = this.state.updateInterval + const title = this.state.title + if(title != "Getting content from Canvas") { + clearInterval(interval); + this.state.updateInterval = null + this.state.contentUpdateCompleted = true + } + }); + }) + .catch(error => { + console.error('Error:', error); + }); + } + + fetchLoadData() { + fetch(`http://${window.location.hostname}:8000/udoit3/api/progress`) + .then(response => response.json()) + .then(data => { + this.setState({ + progress: data.progress, + total: data.total, + title: data.title + }, () => { + const progress = this.state.progress + const total = this.state.total + const interval = this.state.scanInterval + if(progress === total) { + clearInterval(interval); + this.state.scanInterval = null + this.state.scanCompleted = true + } + }); + }) + .catch(error => { + console.error('Error:', error); + }); + } + + getContentUpdate() { + const interval = setInterval(() => { + this.fetchUpdateData(); + }, 1000) + this.setState({updateInterval: interval}) + } + + pollBackgroundWorker() { + if (this.state.contentUpdateCompleted) { + const interval = setInterval(() => { + this.fetchLoadData() + }, 1000) + this.setState({scanInterval: interval}) + } + else { + setTimeout(this.pollBackgroundWorker, 500); + } + } + handleNewReport(data) { let report = this.state.report let hasNewReport = this.state.hasNewReport diff --git a/assets/js/Components/CourseUpdateProgress.js b/assets/js/Components/CourseUpdateProgress.js new file mode 100644 index 000000000..aeed79bf4 --- /dev/null +++ b/assets/js/Components/CourseUpdateProgress.js @@ -0,0 +1,41 @@ +import React from 'react' +import { Spinner } from '@instructure/ui-spinner' +import { Alert } from '@instructure/ui-alerts' + +import Classes from '../../css/app.css' + +class CourseUpdateProgress extends React.Component { + constructor(props) { + super(props) + this.checkProgress = this.checkProgress.bind(this) + this.state = { + completed: false, + } + } + + render() { + return ( + this.checkProgress() && !this.props.contentUpdateCompleted && +
+ + Updated {this.props.progress} items so far... + + +
+ ) + } + + checkProgress() { + if(this.props.title != "Getting content from Canvas") { + setTimeout(() => { + this.props.contentUpdateCompleted = false + }, 2000); + } + return true + } +} + +export default CourseUpdateProgress diff --git a/assets/js/Services/Api.js b/assets/js/Services/Api.js index 3ace069d9..2d693b9f1 100644 --- a/assets/js/Services/Api.js +++ b/assets/js/Services/Api.js @@ -4,6 +4,7 @@ export default class Api { this.apiUrl = `https://${window.location.hostname}`; this.endpoints = { getReport: '/api/courses/{course}/reports/{report}', + getLatestReport: '/api/sync/getLatestReport/{course}', getReportHistory: '/api/courses/{course}/reports', saveIssue: '/api/issues/{issue}/save', resolveIssue: '/api/issues/{issue}/resolve', @@ -233,6 +234,21 @@ export default class Api { }) } + getLatestReport(courseId) + { + const authToken = this.getAuthToken() + let url = `${this.apiUrl}${this.endpoints.getLatestReport}` + url = url.replace('{course}', courseId) + + return fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + 'X-AUTH-TOKEN': authToken, + }, + }) + } + scanContent(contentId) { const authToken = this.getAuthToken() diff --git a/build/nginx/entrypoint.sh b/build/nginx/entrypoint.sh index b437cbf8a..860ec3d25 100644 --- a/build/nginx/entrypoint.sh +++ b/build/nginx/entrypoint.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash service nginx start -php-fpm \ No newline at end of file +php-fpm diff --git a/composer.json b/composer.json index 147aa4be5..38977c356 100644 --- a/composer.json +++ b/composer.json @@ -63,7 +63,7 @@ "symfony/browser-kit": "6.0.*", "symfony/css-selector": "6.0.*", "symfony/debug-bundle": "6.0.*", - "symfony/maker-bundle": "^1.0", + "symfony/maker-bundle": "^1.49", "symfony/phpunit-bridge": "^6.0", "symfony/stopwatch": "6.0.*", "symfony/web-profiler-bundle": "6.0.*" diff --git a/composer.lock b/composer.lock index e622f6a1b..db5ed386e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,26 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "daaa8c2ee8b9bbc314fe8b70f0a91247", + "content-hash": "3bb78515a423c756fa5021513278983e", "packages": [ { "name": "cidilabs/phpally", - "version": "1.2.1", + "version": "1.2.5", "source": { "type": "git", "url": "https://github.com/cidilabs/phpally.git", - "reference": "e3754a3779309434eb86088d03c8f6562218e6be" + "reference": "9a176d9bcaccfa4c6fe6fe2064fa0d6c17d48640" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cidilabs/phpally/zipball/e3754a3779309434eb86088d03c8f6562218e6be", - "reference": "e3754a3779309434eb86088d03c8f6562218e6be", + "url": "https://api.github.com/repos/cidilabs/phpally/zipball/9a176d9bcaccfa4c6fe6fe2064fa0d6c17d48640", + "reference": "9a176d9bcaccfa4c6fe6fe2064fa0d6c17d48640", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^7.5.0", "kaltura/api-client-library": "^17.2", - "php": ">=8.0" + "php": ">=7.4" }, "require-dev": { "phpunit/phpunit": "^8" @@ -37,7 +37,7 @@ }, "scripts": { "test": [ - "./vendor/bin/phpunit tests" + "./vendor/bin/phpunit tests --verbose" ] }, "license": [ @@ -55,10 +55,10 @@ ], "description": "PHP Accessibility (a11y) Testing Library", "support": { - "source": "https://github.com/cidilabs/phpally/tree/1.2.1", + "source": "https://github.com/cidilabs/phpally/tree/1.2.5", "issues": "https://github.com/cidilabs/phpally/issues" }, - "time": "2022-11-22T19:00:25+00:00" + "time": "2023-01-26T19:40:33+00:00" }, { "name": "composer/package-versions-deprecated", @@ -135,16 +135,16 @@ }, { "name": "doctrine/annotations", - "version": "1.14.1", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/9e034d7a70032d422169f27d8759e8d84abb4f51", - "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { @@ -205,9 +205,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.1" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2022-12-12T12:46:12+00:00" + "time": "2023-02-01T09:20:38+00:00" }, { "name": "doctrine/cache", @@ -304,32 +304,34 @@ }, { "name": "doctrine/collections", - "version": "1.8.0", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" + "reference": "3023e150f90a38843856147b58190aa8b46cc155" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", - "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "url": "https://api.github.com/repos/doctrine/collections/zipball/3023e150f90a38843856147b58190aa8b46cc155", + "reference": "3023e150f90a38843856147b58190aa8b46cc155", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1.3 || ^8.0" + "doctrine/deprecations": "^1", + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "phpstan/phpstan": "^1.4.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.22" + "doctrine/coding-standard": "^10.0", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.11" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + "Doctrine\\Common\\Collections\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -368,9 +370,23 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/1.8.0" + "source": "https://github.com/doctrine/collections/tree/2.1.3" }, - "time": "2022-09-01T20:12:10+00:00" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" + } + ], + "time": "2023-07-06T15:15:36+00:00" }, { "name": "doctrine/common", @@ -465,16 +481,16 @@ }, { "name": "doctrine/dbal", - "version": "3.5.1", + "version": "3.6.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" + "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", - "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/96d5a70fd91efdcec81fc46316efc5bf3da17ddf", + "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf", "shasum": "" }, "require": { @@ -487,16 +503,17 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "10.0.0", - "jetbrains/phpstorm-stubs": "2022.2", - "phpstan/phpstan": "1.8.10", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "9.5.25", - "psalm/plugin-phpunit": "0.17.0", - "squizlabs/php_codesniffer": "3.7.1", + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.21", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.9", + "psalm/plugin-phpunit": "0.18.4", + "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.29.0" + "vimeo/psalm": "4.30.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -556,7 +573,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.5.1" + "source": "https://github.com/doctrine/dbal/tree/3.6.5" }, "funding": [ { @@ -572,29 +589,33 @@ "type": "tidelift" } ], - "time": "2022-10-24T07:26:18+00:00" + "time": "2023-07-17T09:15:50+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -613,62 +634,64 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-06-03T09:27:29+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.7.2", + "version": "2.10.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "22d53b2c5ad03929628fb4a928b01135585b7179" + "reference": "f9d59c90b6f525dfc2a2064a695cb56e0ab40311" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/22d53b2c5ad03929628fb4a928b01135585b7179", - "reference": "22d53b2c5ad03929628fb4a928b01135585b7179", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f9d59c90b6f525dfc2a2064a695cb56e0ab40311", + "reference": "f9d59c90b6f525dfc2a2064a695cb56e0ab40311", "shasum": "" }, "require": { - "doctrine/annotations": "^1", "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^2.13.1 || ^3.3.2", + "doctrine/dbal": "^3.6.0", "doctrine/persistence": "^2.2 || ^3", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.1 || ^8.0", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "symfony/config": "^4.4.3 || ^5.4 || ^6.0", - "symfony/console": "^4.4 || ^5.4 || ^6.0", - "symfony/dependency-injection": "^4.4.18 || ^5.4 || ^6.0", + "php": "^7.4 || ^8.0", + "symfony/cache": "^5.4 || ^6.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/dependency-injection": "^5.4 || ^6.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^4.4.22 || ^5.4 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.4 || ^6.0", + "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7", + "symfony/framework-bundle": "^5.4 || ^6.0", "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" }, "conflict": { + "doctrine/annotations": ">=3.0", "doctrine/orm": "<2.11 || >=3.0", - "twig/twig": "<1.34 || >=2.0,<2.4" + "twig/twig": "<1.34 || >=2.0 <2.4" }, "require-dev": { + "doctrine/annotations": "^1 || ^2", "doctrine/coding-standard": "^9.0", + "doctrine/deprecations": "^1.0", "doctrine/orm": "^2.11 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", - "psalm/plugin-phpunit": "^0.16.1", - "psalm/plugin-symfony": "^3", + "phpunit/phpunit": "^9.5.26 || ^10.0", + "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-symfony": "^4", "psr/log": "^1.1.4 || ^2.0 || ^3.0", "symfony/phpunit-bridge": "^6.1", - "symfony/property-info": "^4.4 || ^5.4 || ^6.0", - "symfony/proxy-manager-bridge": "^4.4 || ^5.4 || ^6.0", - "symfony/security-bundle": "^4.4 || ^5.4 || ^6.0", - "symfony/twig-bridge": "^4.4 || ^5.4 || ^6.0", - "symfony/validator": "^4.4 || ^5.4 || ^6.0", - "symfony/web-profiler-bundle": "^4.4 || ^5.4 || ^6.0", - "symfony/yaml": "^4.4 || ^5.4 || ^6.0", + "symfony/property-info": "^5.4 || ^6.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", + "symfony/security-bundle": "^5.4 || ^6.0", + "symfony/twig-bridge": "^5.4 || ^6.0", + "symfony/validator": "^5.4 || ^6.0", + "symfony/web-profiler-bundle": "^5.4 || ^6.0", + "symfony/yaml": "^5.4 || ^6.0", "twig/twig": "^1.34 || ^2.12 || ^3.0", - "vimeo/psalm": "^4.7" + "vimeo/psalm": "^4.30" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -713,7 +736,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.7.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.10.1" }, "funding": [ { @@ -729,20 +752,20 @@ "type": "tidelift" } ], - "time": "2022-12-07T12:07:11+00:00" + "time": "2023-06-28T07:47:41+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.2.2", + "version": "3.2.4", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "3393f411ba25ade21969c33f2053220044854d01" + "reference": "94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/3393f411ba25ade21969c33f2053220044854d01", - "reference": "3393f411ba25ade21969c33f2053220044854d01", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e", + "reference": "94e6b0fe1a50901d52f59dbb9b4b0737718b2c1e", "shasum": "" }, "require": { @@ -752,15 +775,15 @@ "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "doctrine/orm": "^2.6", "doctrine/persistence": "^1.3||^2.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^8.0|^9.0", - "vimeo/psalm": "^4.11" + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5|^9.5", + "vimeo/psalm": "^4.22" }, "type": "symfony-bundle", "autoload": { @@ -798,7 +821,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.2" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.2.4" }, "funding": [ { @@ -814,34 +837,33 @@ "type": "tidelift" } ], - "time": "2022-02-01T18:08:07+00:00" + "time": "2023-06-02T08:19:26+00:00" }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", "autoload": { @@ -890,7 +912,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -906,32 +928,32 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.6", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", "autoload": { @@ -981,7 +1003,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -997,34 +1019,34 @@ "type": "tidelift" } ], - "time": "2022-10-20T09:10:12+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -1051,7 +1073,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -1067,35 +1089,37 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1127,7 +1151,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -1143,49 +1167,48 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "doctrine/migrations", - "version": "3.5.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "61c6ef3a10b7df43c3b6388a184754f26e58700a" + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/61c6ef3a10b7df43c3b6388a184754f26e58700a", - "reference": "61c6ef3a10b7df43c3b6388a184754f26e58700a", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/e542ad8bcd606d7a18d0875babb8a6d963c9c059", + "reference": "e542ad8bcd606d7a18d0875babb8a6d963c9c059", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/dbal": "^3.3", + "doctrine/dbal": "^3.5.1", "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "php": "^7.4 || ^8.0", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", "symfony/console": "^4.4.16 || ^5.4 || ^6.0", - "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0" + "symfony/stopwatch": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^6.2" }, "conflict": { "doctrine/orm": "<2.12" }, "require-dev": { "doctrine/coding-standard": "^9", - "doctrine/orm": "^2.12", + "doctrine/orm": "^2.13", "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", - "ergebnis/composer-normalize": "^2.9", "ext-pdo_sqlite": "*", "phpstan/phpstan": "^1.5", "phpstan/phpstan-deprecation-rules": "^1", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.1", "phpstan/phpstan-symfony": "^1.1", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^9.5.24", "symfony/cache": "^4.4 || ^5.4 || ^6.0", "symfony/process": "^4.4 || ^5.4 || ^6.0", "symfony/yaml": "^4.4 || ^5.4 || ^6.0" @@ -1198,12 +1221,6 @@ "bin/doctrine-migrations" ], "type": "library", - "extra": { - "composer-normalize": { - "indent-size": 4, - "indent-style": "space" - } - }, "autoload": { "psr-4": { "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" @@ -1236,7 +1253,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.5.2" + "source": "https://github.com/doctrine/migrations/tree/3.6.0" }, "funding": [ { @@ -1252,55 +1269,56 @@ "type": "tidelift" } ], - "time": "2022-08-04T14:29:49+00:00" + "time": "2023-02-15T18:49:46+00:00" }, { "name": "doctrine/orm", - "version": "2.13.4", + "version": "2.15.4", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "a5a6cc6630ce497290396d5f206887227820a634" + "reference": "f7e4b61459692f9b747f40696e6bf72080390f2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/a5a6cc6630ce497290396d5f206887227820a634", - "reference": "a5a6cc6630ce497290396d5f206887227820a634", + "url": "https://api.github.com/repos/doctrine/orm/zipball/f7e4b61459692f9b747f40696e6bf72080390f2d", + "reference": "f7e4b61459692f9b747f40696e6bf72080390f2d", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", + "doctrine/collections": "^1.5 || ^2.1", "doctrine/common": "^3.0.3", "doctrine/dbal": "^2.13.1 || ^3.2", "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.1", + "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.2.3", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^2", "doctrine/persistence": "^2.4 || ^3", "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" + "doctrine/annotations": "<1.13 || >= 3.0" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0.2 || ^10.0", + "doctrine/annotations": "^1.13 || ^2", + "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.9.2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpstan/phpstan": "~1.4.10 || 1.10.25", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.1", + "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.0", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.30.0" + "vimeo/psalm": "4.30.0 || 5.13.1" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1350,22 +1368,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.13.4" + "source": "https://github.com/doctrine/orm/tree/2.15.4" }, - "time": "2022-11-20T18:53:31+00:00" + "time": "2023-07-18T07:50:04+00:00" }, { "name": "doctrine/persistence", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b" + "reference": "63fee8c33bef740db6730eb2a750cd3da6495603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/2a9c70a5e21f8968c5a46b79f819ea52f322080b", - "reference": "2a9c70a5e21f8968c5a46b79f819ea52f322080b", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/63fee8c33bef740db6730eb2a750cd3da6495603", + "reference": "63fee8c33bef740db6730eb2a750cd3da6495603", "shasum": "" }, "require": { @@ -1374,20 +1392,18 @@ "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "conflict": { - "doctrine/annotations": "<1.7 || >=2.0", "doctrine/common": "<2.10" }, "require-dev": { "composer/package-versions-deprecated": "^1.11", - "doctrine/annotations": "^1.7", - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.8.8", + "phpstan/phpstan": "1.9.4", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.29.0" + "vimeo/psalm": "4.30.0 || 5.3.0" }, "type": "library", "autoload": { @@ -1436,7 +1452,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.1.0" + "source": "https://github.com/doctrine/persistence/tree/3.2.0" }, "funding": [ { @@ -1452,7 +1468,7 @@ "type": "tidelift" } ], - "time": "2022-11-18T14:10:19+00:00" + "time": "2023-05-17T18:32:04+00:00" }, { "name": "doctrine/sql-formatter", @@ -1508,27 +1524,26 @@ }, { "name": "egulias/email-validator", - "version": "3.2.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715" + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715", - "reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1536,7 +1551,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1564,7 +1579,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/3.2.1" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" }, "funding": [ { @@ -1572,7 +1587,7 @@ "type": "github" } ], - "time": "2022-06-18T20:57:19+00:00" + "time": "2023-01-14T14:17:03+00:00" }, { "name": "firebase/php-jwt", @@ -1633,22 +1648,22 @@ }, { "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.13", + "version": "v1.0.16", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "88354616f4cf4f6620910fd035e282173ba453e8" + "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/88354616f4cf4f6620910fd035e282173ba453e8", - "reference": "88354616f4cf4f6620910fd035e282173ba453e8", + "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/ecadbdc9052e4ad08c60c8a02268712e50427f7c", + "reference": "ecadbdc9052e4ad08c60c8a02268712e50427f7c", "shasum": "" }, "require": { "laminas/laminas-code": "~3.4.1|^4.0", "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0" + "symfony/filesystem": "^4.4.17|^5.0|^6.0|^7.0" }, "conflict": { "laminas/laminas-stdlib": "<3.2.1", @@ -1659,7 +1674,7 @@ }, "require-dev": { "ext-phar": "*", - "symfony/phpunit-bridge": "^5.4|^6.0" + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0" }, "type": "library", "extra": { @@ -1699,7 +1714,7 @@ ], "support": { "issues": "https://github.com/FriendsOfPHP/proxy-manager-lts/issues", - "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.13" + "source": "https://github.com/FriendsOfPHP/proxy-manager-lts/tree/v1.0.16" }, "funding": [ { @@ -1711,26 +1726,26 @@ "type": "tidelift" } ], - "time": "2022-10-17T19:48:16+00:00" + "time": "2023-05-24T07:17:17+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1741,7 +1756,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -1755,9 +1771,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -1823,7 +1836,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" }, "funding": [ { @@ -1839,38 +1852,37 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2023-05-21T14:04:53+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -1907,7 +1919,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.0" }, "funding": [ { @@ -1923,26 +1935,26 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-05-21T13:50:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.3", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "67c26b443f348a51926030c83481b85718457d3d" + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", - "reference": "67c26b443f348a51926030c83481b85718457d3d", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -1962,9 +1974,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "autoload": { @@ -2026,7 +2035,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.3" + "source": "https://github.com/guzzle/psr7/tree/2.5.0" }, "funding": [ { @@ -2042,7 +2051,7 @@ "type": "tidelift" } ], - "time": "2022-10-26T14:07:24+00:00" + "time": "2023-04-17T16:11:26+00:00" }, { "name": "htmlawed/htmlawed", @@ -2218,20 +2227,20 @@ }, { "name": "knplabs/knp-snappy-bundle", - "version": "v1.9.0", + "version": "v1.9.1", "source": { "type": "git", "url": "https://github.com/KnpLabs/KnpSnappyBundle.git", - "reference": "da11c2d083f5d8586c9bd59d2948ab7d39d57b34" + "reference": "cfdddb3fd848d97c6b07be72b7703c2e45274954" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/da11c2d083f5d8586c9bd59d2948ab7d39d57b34", - "reference": "da11c2d083f5d8586c9bd59d2948ab7d39d57b34", + "url": "https://api.github.com/repos/KnpLabs/KnpSnappyBundle/zipball/cfdddb3fd848d97c6b07be72b7703c2e45274954", + "reference": "cfdddb3fd848d97c6b07be72b7703c2e45274954", "shasum": "" }, "require": { - "knplabs/knp-snappy": "^1.2", + "knplabs/knp-snappy": "^1.4.2", "php": ">=7.4", "symfony/framework-bundle": "^4.4|^5.1|^6.0" }, @@ -2276,27 +2285,27 @@ ], "support": { "issues": "https://github.com/KnpLabs/KnpSnappyBundle/issues", - "source": "https://github.com/KnpLabs/KnpSnappyBundle/tree/v1.9.0" + "source": "https://github.com/KnpLabs/KnpSnappyBundle/tree/v1.9.1" }, - "time": "2022-01-05T15:50:51+00:00" + "time": "2023-05-12T12:38:57+00:00" }, { "name": "knpuniversity/oauth2-client-bundle", - "version": "v2.10.1", + "version": "v2.15.0", "source": { "type": "git", "url": "https://github.com/knpuniversity/oauth2-client-bundle.git", - "reference": "0f4b238f16793ea6d2225044cfeae41b148a5c49" + "reference": "9df0736d02eb20b953ec8e9986743611747d9ed9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/0f4b238f16793ea6d2225044cfeae41b148a5c49", - "reference": "0f4b238f16793ea6d2225044cfeae41b148a5c49", + "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/9df0736d02eb20b953ec8e9986743611747d9ed9", + "reference": "9df0736d02eb20b953ec8e9986743611747d9ed9", "shasum": "" }, "require": { "league/oauth2-client": "^2.0", - "php": ">=7.2.5", + "php": ">=7.4", "symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/framework-bundle": "^4.4|^5.0|^6.0", "symfony/http-foundation": "^4.4|^5.0|^6.0", @@ -2336,35 +2345,35 @@ ], "support": { "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues", - "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.10.1" + "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.15.0" }, - "time": "2022-05-24T17:36:38+00:00" + "time": "2023-05-03T16:44:38+00:00" }, { "name": "laminas/laminas-code", - "version": "4.8.0", + "version": "4.11.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106" + "reference": "169123b3ede20a9193480c53de2a8194f8c073ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/dd19fe8e07cc3f374308565667eecd4958c22106", - "reference": "dd19fe8e07cc3f374308565667eecd4958c22106", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/169123b3ede20a9193480c53de2a8194f8c073ec", + "reference": "169123b3ede20a9193480c53de2a8194f8c073ec", "shasum": "" }, "require": { "php": "~8.1.0 || ~8.2.0" }, "require-dev": { - "doctrine/annotations": "^1.13.3", + "doctrine/annotations": "^2.0.0", "ext-phar": "*", "laminas/laminas-coding-standard": "^2.3.0", "laminas/laminas-stdlib": "^3.6.1", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.0", - "vimeo/psalm": "^5.1.0" + "phpunit/phpunit": "^10.0.9", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.7.1" }, "suggest": { "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", @@ -2401,20 +2410,20 @@ "type": "community_bridge" } ], - "time": "2022-12-08T02:08:23+00:00" + "time": "2023-05-14T12:05:38+00:00" }, { "name": "league/oauth2-client", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "2334c249907190c132364f5dae0287ab8666aa19" + "reference": "160d6274b03562ebeb55ed18399281d8118b76c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/2334c249907190c132364f5dae0287ab8666aa19", - "reference": "2334c249907190c132364f5dae0287ab8666aa19", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/160d6274b03562ebeb55ed18399281d8118b76c8", + "reference": "160d6274b03562ebeb55ed18399281d8118b76c8", "shasum": "" }, "require": { @@ -2469,22 +2478,22 @@ ], "support": { "issues": "https://github.com/thephpleague/oauth2-client/issues", - "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.1" + "source": "https://github.com/thephpleague/oauth2-client/tree/2.7.0" }, - "time": "2021-12-22T16:42:49+00:00" + "time": "2023-04-16T18:19:15+00:00" }, { "name": "monolog/monolog", - "version": "3.2.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "305444bc6fb6c89e490f4b34fa6e979584d7fa81" + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/305444bc6fb6c89e490f4b34fa6e979584d7fa81", - "reference": "305444bc6fb6c89e490f4b34fa6e979584d7fa81", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", "shasum": "" }, "require": { @@ -2499,16 +2508,16 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^9.5.16", - "predis/predis": "^1.1", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" @@ -2560,7 +2569,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.2.0" + "source": "https://github.com/Seldaek/monolog/tree/3.4.0" }, "funding": [ { @@ -2572,31 +2581,31 @@ "type": "tidelift" } ], - "time": "2022-07-24T12:00:55+00:00" + "time": "2023-06-21T08:46:11+00:00" }, { "name": "mpdf/mpdf", - "version": "v8.1.3", + "version": "v8.1.6", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "59ba1a9374211174996d8530a855dedfbd5f5681" + "reference": "146c7c1dfd21c826b9d5bbfe3c15e52fd933c90f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/59ba1a9374211174996d8530a855dedfbd5f5681", - "reference": "59ba1a9374211174996d8530a855dedfbd5f5681", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/146c7c1dfd21c826b9d5bbfe3c15e52fd933c90f", + "reference": "146c7c1dfd21c826b9d5bbfe3c15e52fd933c90f", "shasum": "" }, "require": { "ext-gd": "*", "ext-mbstring": "*", + "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0", - "php-http/message-factory": "^1.0", "psr/http-message": "^1.0", - "psr/log": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" }, "require-dev": { @@ -2649,20 +2658,64 @@ "type": "custom" } ], - "time": "2022-12-08T12:55:58+00:00" + "time": "2023-05-03T19:36:43+00:00" + }, + { + "name": "mpdf/psr-log-aware-trait", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-log-aware-trait.git", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", + "shasum": "" + }, + "require": { + "psr/log": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrLogAwareTrait\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + } + ], + "description": "Trait to allow support of different psr/log versions.", + "support": { + "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", + "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" + }, + "time": "2023-05-03T06:19:36+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -2700,7 +2753,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -2708,7 +2761,7 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "oro/doctrine-extensions", @@ -2768,60 +2821,6 @@ }, "time": "2022-05-10T14:09:20+00:00" }, - { - "name": "php-http/message-factory", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" - }, - "time": "2015-12-19T14:08:53+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -2934,24 +2933,27 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.2", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d" + "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/48f445a408c131e38cab1c235aa6d2bb7a0bb20d", - "reference": "48f445a408c131e38cab1c235aa6d2bb7a0bb20d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b2fe4d22a5426f38e014855322200b97b5362c0d", + "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.0", "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", @@ -2983,9 +2985,56 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.2" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.2" }, - "time": "2022-10-14T12:47:21+00:00" + "time": "2023-05-30T18:13:47+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "a2b24135c35852b348894320d47b3902a94bc494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a2b24135c35852b348894320d47b3902a94bc494", + "reference": "a2b24135c35852b348894320d47b3902a94bc494", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.0" + }, + "time": "2023-07-23T22:17:56+00:00" }, { "name": "psr/cache", @@ -3141,21 +3190,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -3175,7 +3224,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -3187,27 +3236,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -3227,7 +3276,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for PSR-7 HTTP message factories", @@ -3242,31 +3291,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -3295,9 +3344,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/1.1" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:50:52+00:00" }, { "name": "psr/link", @@ -3357,16 +3406,16 @@ }, { "name": "psr/log", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { @@ -3375,7 +3424,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -3401,9 +3450,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/2.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-07-14T16:41:46+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "ralouphie/getallheaders", @@ -3451,20 +3500,20 @@ }, { "name": "sensio/framework-extra-bundle", - "version": "v6.2.9", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135" + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/dcfac94d6bdcf95c126e8ccac2104917c7c8f135", - "reference": "dcfac94d6bdcf95c126e8ccac2104917c7c8f135", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/2f886f4b31f23c76496901acaedfedb6936ba61f", + "reference": "2f886f4b31f23c76496901acaedfedb6936ba61f", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", + "doctrine/annotations": "^1.0|^2.0", "php": ">=7.2.5", "symfony/config": "^4.4|^5.0|^6.0", "symfony/dependency-injection": "^4.4|^5.0|^6.0", @@ -3522,24 +3571,23 @@ "controllers" ], "support": { - "issues": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/issues", - "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.9" + "source": "https://github.com/sensiolabs/SensioFrameworkExtraBundle/tree/v6.2.10" }, "abandoned": "Symfony", - "time": "2022-11-01T17:17:13+00:00" + "time": "2023-02-24T14:57:12+00:00" }, { "name": "setasign/fpdi", - "version": "v2.3.6", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31" + "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", + "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", "shasum": "" }, "require": { @@ -3552,7 +3600,7 @@ "require-dev": { "phpunit/phpunit": "~5.7", "setasign/fpdf": "~1.8", - "setasign/tfpdf": "1.31", + "setasign/tfpdf": "~1.31", "squizlabs/php_codesniffer": "^3.5", "tecnickcom/tcpdf": "~6.2" }, @@ -3590,7 +3638,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.3.6" + "source": "https://github.com/Setasign/FPDI/tree/v2.4.1" }, "funding": [ { @@ -3598,7 +3646,7 @@ "type": "tidelift" } ], - "time": "2021-02-11T11:37:01+00:00" + "time": "2023-07-27T08:12:09+00:00" }, { "name": "symfony/apache-pack", @@ -3628,16 +3676,16 @@ }, { "name": "symfony/asset", - "version": "v6.0.13", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "77b6b2273185bae723c38b40c6b6990a09616327" + "reference": "d42c434e1a73d81cae7c75cd122f20fc80ac1a2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/77b6b2273185bae723c38b40c6b6990a09616327", - "reference": "77b6b2273185bae723c38b40c6b6990a09616327", + "url": "https://api.github.com/repos/symfony/asset/zipball/d42c434e1a73d81cae7c75cd122f20fc80ac1a2b", + "reference": "d42c434e1a73d81cae7c75cd122f20fc80ac1a2b", "shasum": "" }, "require": { @@ -3680,7 +3728,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.0.13" + "source": "https://github.com/symfony/asset/tree/v6.0.19" }, "funding": [ { @@ -3696,29 +3744,29 @@ "type": "tidelift" } ], - "time": "2022-08-31T08:17:34+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/cache", - "version": "v6.2.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "64cb231dfb25677097d18503d1ad4d016b19f19c" + "reference": "d176b97600860df13e851538c2df2ad88e9e5ca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/64cb231dfb25677097d18503d1ad4d016b19f19c", - "reference": "64cb231dfb25677097d18503d1ad4d016b19f19c", + "url": "https://api.github.com/repos/symfony/cache/zipball/d176b97600860df13e851538c2df2ad88e9e5ca9", + "reference": "d176b97600860df13e851538c2df2ad88e9e5ca9", "shasum": "" }, "require": { "php": ">=8.1", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2|^3", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^6.2" + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.2.10" }, "conflict": { "doctrine/dbal": "<2.13.1", @@ -3734,7 +3782,7 @@ "require-dev": { "cache/integration-tests": "dev-master", "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1", + "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "symfony/config": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", @@ -3776,7 +3824,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.2.0" + "source": "https://github.com/symfony/cache/tree/v6.3.2" }, "funding": [ { @@ -3792,33 +3840,30 @@ "type": "tidelift" } ], - "time": "2022-11-24T11:58:37+00:00" + "time": "2023-07-27T16:19:14+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "e8d1a5fc43534063204b74c080ebe36307d12271" + "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/e8d1a5fc43534063204b74c080ebe36307d12271", - "reference": "e8d1a5fc43534063204b74c080ebe36307d12271", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", + "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", "shasum": "" }, "require": { "php": ">=8.1", "psr/cache": "^3.0" }, - "suggest": { - "symfony/cache-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3855,7 +3900,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.3.0" }, "funding": [ { @@ -3871,41 +3916,39 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/config", - "version": "v6.2.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0" + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", - "reference": "ebf27792246165a2a0b6b69ec9c620cac8c5a2f0", + "url": "https://api.github.com/repos/symfony/config/zipball/b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", + "reference": "b47ca238b03e7b0d7880ffd1cf06e8d637ca1467", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/filesystem": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4" + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { "symfony/event-dispatcher": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", "symfony/messenger": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" - }, "type": "library", "autoload": { "psr-4": { @@ -3932,7 +3975,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.2.0" + "source": "https://github.com/symfony/config/tree/v6.3.2" }, "funding": [ { @@ -3948,20 +3991,20 @@ "type": "tidelift" } ], - "time": "2022-11-02T09:08:04+00:00" + "time": "2023-07-19T20:22:16+00:00" }, { "name": "symfony/console", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "be294423f337dda97c810733138c0caec1bb0575" + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/be294423f337dda97c810733138c0caec1bb0575", - "reference": "be294423f337dda97c810733138c0caec1bb0575", + "url": "https://api.github.com/repos/symfony/console/zipball/c3ebc83d031b71c39da318ca8b7a07ecc67507ed", + "reference": "c3ebc83d031b71c39da318ca8b7a07ecc67507ed", "shasum": "" }, "require": { @@ -4027,7 +4070,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.0.16" + "source": "https://github.com/symfony/console/tree/v6.0.19" }, "funding": [ { @@ -4043,20 +4086,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T18:58:46+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.1.8", + "version": "v6.1.12", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "11e33ed84db0ced77511a23b35168db127909f0e" + "reference": "360c9d0948e1fe675336346d5862e8e55b378d90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/11e33ed84db0ced77511a23b35168db127909f0e", - "reference": "11e33ed84db0ced77511a23b35168db127909f0e", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/360c9d0948e1fe675336346d5862e8e55b378d90", + "reference": "360c9d0948e1fe675336346d5862e8e55b378d90", "shasum": "" }, "require": { @@ -4114,7 +4157,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.1.8" + "source": "https://github.com/symfony/dependency-injection/tree/v6.1.12" }, "funding": [ { @@ -4130,20 +4173,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T07:34:52+00:00" + "time": "2023-01-30T15:43:30+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { @@ -4152,7 +4195,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4181,7 +4224,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -4197,20 +4240,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v6.1.8", + "version": "v6.1.11", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "088996a46a2561582001153df9c7fab7c065908a" + "reference": "f50159673ec3f4a68b81db4712f4a5bbe47a9442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/088996a46a2561582001153df9c7fab7c065908a", - "reference": "088996a46a2561582001153df9c7fab7c065908a", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/f50159673ec3f4a68b81db4712f4a5bbe47a9442", + "reference": "f50159673ec3f4a68b81db4712f4a5bbe47a9442", "shasum": "" }, "require": { @@ -4238,7 +4281,7 @@ "symfony/validator": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.10.4|^2", "doctrine/collections": "^1.0|^2.0", "doctrine/data-fixtures": "^1.1", "doctrine/dbal": "^2.13.1|^3.0", @@ -4296,7 +4339,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.1.8" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.1.11" }, "funding": [ { @@ -4312,20 +4355,20 @@ "type": "tidelift" } ], - "time": "2022-11-28T12:27:40+00:00" + "time": "2023-01-10T18:53:01+00:00" }, { "name": "symfony/doctrine-messenger", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "2db111da8b1f67f890a08cf208eeb33c26347e77" + "reference": "bf235c311bac1e882fe8943198e141302de2d4f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/2db111da8b1f67f890a08cf208eeb33c26347e77", - "reference": "2db111da8b1f67f890a08cf208eeb33c26347e77", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/bf235c311bac1e882fe8943198e141302de2d4f9", + "reference": "bf235c311bac1e882fe8943198e141302de2d4f9", "shasum": "" }, "require": { @@ -4368,7 +4411,7 @@ "description": "Symfony Doctrine Messenger Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v6.0.16" + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.0.19" }, "funding": [ { @@ -4384,20 +4427,20 @@ "type": "tidelift" } ], - "time": "2022-11-04T07:39:59+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/dotenv", - "version": "v6.0.5", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "1c2288fdfd0787288cd04b9868f879f2212159c4" + "reference": "9cee123707e689f7e06c09624c145d206468bcf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1c2288fdfd0787288cd04b9868f879f2212159c4", - "reference": "1c2288fdfd0787288cd04b9868f879f2212159c4", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/9cee123707e689f7e06c09624c145d206468bcf2", + "reference": "9cee123707e689f7e06c09624c145d206468bcf2", "shasum": "" }, "require": { @@ -4438,7 +4481,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.0.5" + "source": "https://github.com/symfony/dotenv/tree/v6.0.19" }, "funding": [ { @@ -4454,20 +4497,20 @@ "type": "tidelift" } ], - "time": "2022-02-21T17:15:17+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/error-handler", - "version": "v6.2.1", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9" + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/b4e41f62c1124378863ff2705158a60da3e4c6b9", - "reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", "shasum": "" }, "require": { @@ -4475,8 +4518,11 @@ "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, @@ -4509,7 +4555,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.2.1" + "source": "https://github.com/symfony/error-handler/tree/v6.3.2" }, "funding": [ { @@ -4525,28 +4571,29 @@ "type": "tidelift" } ], - "time": "2022-12-01T21:07:46+00:00" + "time": "2023-07-16T17:05:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9efb1618fabee89515fe031314e8ed5625f85a53" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53", - "reference": "9efb1618fabee89515fe031314e8ed5625f85a53", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -4559,13 +4606,9 @@ "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, "type": "library", "autoload": { "psr-4": { @@ -4592,7 +4635,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -4608,33 +4651,30 @@ "type": "tidelift" } ], - "time": "2022-11-02T09:08:04+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4671,7 +4711,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -4687,20 +4727,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/expression-language", - "version": "v6.0.14", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "80fc98c72206ee7caa3c427e91467d6bf48862c6" + "reference": "d912aa436eeed66ae369a2b8a247249bed8f9a03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/80fc98c72206ee7caa3c427e91467d6bf48862c6", - "reference": "80fc98c72206ee7caa3c427e91467d6bf48862c6", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/d912aa436eeed66ae369a2b8a247249bed8f9a03", + "reference": "d912aa436eeed66ae369a2b8a247249bed8f9a03", "shasum": "" }, "require": { @@ -4734,7 +4774,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.0.14" + "source": "https://github.com/symfony/expression-language/tree/v6.0.19" }, "funding": [ { @@ -4750,20 +4790,20 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:02:12+00:00" + "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016" + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/50b2523c874605cf3d4acf7a9e2b30b6a440a016", - "reference": "50b2523c874605cf3d4acf7a9e2b30b6a440a016", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { @@ -4797,7 +4837,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.0" + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { @@ -4813,20 +4853,20 @@ "type": "tidelift" } ], - "time": "2022-11-20T13:01:27+00:00" + "time": "2023-06-01T08:30:39+00:00" }, { "name": "symfony/finder", - "version": "v6.2.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", - "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { @@ -4861,7 +4901,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.0" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -4877,20 +4917,20 @@ "type": "tidelift" } ], - "time": "2022-10-09T08:55:40+00:00" + "time": "2023-07-31T08:31:44+00:00" }, { "name": "symfony/flex", - "version": "v1.19.3", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "ab0453b16029e131c112df1a76e59eb2a47e1f67" + "reference": "49059a10127ac8270957e116a2251ae535d202ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/ab0453b16029e131c112df1a76e59eb2a47e1f67", - "reference": "ab0453b16029e131c112df1a76e59eb2a47e1f67", + "url": "https://api.github.com/repos/symfony/flex/zipball/49059a10127ac8270957e116a2251ae535d202ac", + "reference": "49059a10127ac8270957e116a2251ae535d202ac", "shasum": "" }, "require": { @@ -4926,7 +4966,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v1.19.3" + "source": "https://github.com/symfony/flex/tree/v1.20.0" }, "funding": [ { @@ -4942,20 +4982,20 @@ "type": "tidelift" } ], - "time": "2022-08-07T09:39:08+00:00" + "time": "2023-05-26T16:25:26+00:00" }, { "name": "symfony/form", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "1ff4439b8f55d91c0982583c15d339c08abf1e63" + "reference": "bec07ecf4aac245183b8e0fa93eb68630415346e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/1ff4439b8f55d91c0982583c15d339c08abf1e63", - "reference": "1ff4439b8f55d91c0982583c15d339c08abf1e63", + "url": "https://api.github.com/repos/symfony/form/zipball/bec07ecf4aac245183b8e0fa93eb68630415346e", + "reference": "bec07ecf4aac245183b8e0fa93eb68630415346e", "shasum": "" }, "require": { @@ -5028,7 +5068,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.0.16" + "source": "https://github.com/symfony/form/tree/v6.0.19" }, "funding": [ { @@ -5044,20 +5084,20 @@ "type": "tidelift" } ], - "time": "2022-11-28T12:25:56+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "ac099ef8dba62fd58d9824438b144fa4afce86d8" + "reference": "ee403597484be1073222373fc2962b44c36f5dd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ac099ef8dba62fd58d9824438b144fa4afce86d8", - "reference": "ac099ef8dba62fd58d9824438b144fa4afce86d8", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/ee403597484be1073222373fc2962b44c36f5dd4", + "reference": "ee403597484be1073222373fc2962b44c36f5dd4", "shasum": "" }, "require": { @@ -5107,7 +5147,7 @@ "symfony/workflow": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.13.1", + "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/asset": "^5.4|^6.0", @@ -5176,7 +5216,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.0.16" + "source": "https://github.com/symfony/framework-bundle/tree/v6.0.19" }, "funding": [ { @@ -5192,20 +5232,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T18:58:46+00:00" + "time": "2023-01-11T11:50:03+00:00" }, { "name": "symfony/http-client", - "version": "v6.0.16", + "version": "v6.0.20", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "5db1221826d5f841f443d434358d5f82c862c5a9" + "reference": "541c04560da1875f62c963c3aab6ea12a7314e11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/5db1221826d5f841f443d434358d5f82c862c5a9", - "reference": "5db1221826d5f841f443d434358d5f82c862c5a9", + "url": "https://api.github.com/repos/symfony/http-client/zipball/541c04560da1875f62c963c3aab6ea12a7314e11", + "reference": "541c04560da1875f62c963c3aab6ea12a7314e11", "shasum": "" }, "require": { @@ -5260,7 +5300,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v6.0.16" + "source": "https://github.com/symfony/http-client/tree/v6.0.20" }, "funding": [ { @@ -5276,32 +5316,29 @@ "type": "tidelift" } ], - "time": "2022-11-14T10:09:52+00:00" + "time": "2023-01-30T15:41:07+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.1.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800" + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/fd038f08c623ab5d22b26e9ba35afe8c79071800", - "reference": "fd038f08c623ab5d22b26e9ba35afe8c79071800", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/http-client-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -5341,7 +5378,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" }, "funding": [ { @@ -5357,32 +5394,34 @@ "type": "tidelift" } ], - "time": "2022-04-22T07:30:54+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.2.1", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac" + "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0bbd5a7e81b38f32504399b9199f265505b7bac", - "reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3", + "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" }, "conflict": { "symfony/cache": "<6.2" }, "require-dev": { - "predis/predis": "~1.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", @@ -5390,9 +5429,6 @@ "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, "type": "library", "autoload": { "psr-4": { @@ -5419,7 +5455,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.1" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.2" }, "funding": [ { @@ -5435,20 +5471,20 @@ "type": "tidelift" } ], - "time": "2022-12-04T18:26:13+00:00" + "time": "2023-07-23T21:58:39+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.8", + "version": "v6.1.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6073eaed148f4c0b8d4ae33e7332b34327ef728e" + "reference": "7a4a69dee1b0db04bdc12e86d4cd0dbf6daa390c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6073eaed148f4c0b8d4ae33e7332b34327ef728e", - "reference": "6073eaed148f4c0b8d4ae33e7332b34327ef728e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7a4a69dee1b0db04bdc12e86d4cd0dbf6daa390c", + "reference": "7a4a69dee1b0db04bdc12e86d4cd0dbf6daa390c", "shasum": "" }, "require": { @@ -5529,7 +5565,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.1.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.1.12" }, "funding": [ { @@ -5545,20 +5581,20 @@ "type": "tidelift" } ], - "time": "2022-11-28T18:20:59+00:00" + "time": "2023-02-01T08:26:56+00:00" }, { "name": "symfony/intl", - "version": "v6.0.15", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "3377841a596c69da08086c50e09a37f2b5b1b598" + "reference": "a2e1ce9048ea549ee1e8d9ce521cbe9a9ec7d92c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/3377841a596c69da08086c50e09a37f2b5b1b598", - "reference": "3377841a596c69da08086c50e09a37f2b5b1b598", + "url": "https://api.github.com/repos/symfony/intl/zipball/a2e1ce9048ea549ee1e8d9ce521cbe9a9ec7d92c", + "reference": "a2e1ce9048ea549ee1e8d9ce521cbe9a9ec7d92c", "shasum": "" }, "require": { @@ -5609,7 +5645,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.0.15" + "source": "https://github.com/symfony/intl/tree/v6.0.19" }, "funding": [ { @@ -5625,24 +5661,24 @@ "type": "tidelift" } ], - "time": "2022-10-23T10:33:07+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/mailer", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "aa47b34ab09fa03106d9e156632e4c6176b962da" + "reference": "cd60799210c488f545ddde2444dc1aa548322872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/aa47b34ab09fa03106d9e156632e4c6176b962da", - "reference": "aa47b34ab09fa03106d9e156632e4c6176b962da", + "url": "https://api.github.com/repos/symfony/mailer/zipball/cd60799210c488f545ddde2444dc1aa548322872", + "reference": "cd60799210c488f545ddde2444dc1aa548322872", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3", + "egulias/email-validator": "^2.1.10|^3|^4", "php": ">=8.0.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", @@ -5683,7 +5719,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.0.16" + "source": "https://github.com/symfony/mailer/tree/v6.0.19" }, "funding": [ { @@ -5699,20 +5735,20 @@ "type": "tidelift" } ], - "time": "2022-11-04T07:39:59+00:00" + "time": "2023-01-11T11:50:03+00:00" }, { "name": "symfony/messenger", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/messenger.git", - "reference": "f1ad9a3faa844c6fec4a34c182a945ba3d877e93" + "reference": "d584d1754e9e19f83a43c75f36c84b42f6f7e209" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/f1ad9a3faa844c6fec4a34c182a945ba3d877e93", - "reference": "f1ad9a3faa844c6fec4a34c182a945ba3d877e93", + "url": "https://api.github.com/repos/symfony/messenger/zipball/d584d1754e9e19f83a43c75f36c84b42f6f7e209", + "reference": "d584d1754e9e19f83a43c75f36c84b42f6f7e209", "shasum": "" }, "require": { @@ -5768,7 +5804,7 @@ "description": "Helps applications send and receive messages to/from other applications or via message queues", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/messenger/tree/v6.0.16" + "source": "https://github.com/symfony/messenger/tree/v6.0.19" }, "funding": [ { @@ -5784,20 +5820,20 @@ "type": "tidelift" } ], - "time": "2022-11-14T10:09:52+00:00" + "time": "2023-01-20T17:44:14+00:00" }, { "name": "symfony/mime", - "version": "v6.1.8", + "version": "v6.1.11", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d02c3938a50fbc95cf8f364be1c011758270f30e" + "reference": "2bff58573e81a1df51bf99ad01725428beda1cbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d02c3938a50fbc95cf8f364be1c011758270f30e", - "reference": "d02c3938a50fbc95cf8f364be1c011758270f30e", + "url": "https://api.github.com/repos/symfony/mime/zipball/2bff58573e81a1df51bf99ad01725428beda1cbc", + "reference": "2bff58573e81a1df51bf99ad01725428beda1cbc", "shasum": "" }, "require": { @@ -5812,7 +5848,7 @@ "symfony/mailer": "<5.4" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", @@ -5849,7 +5885,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.1.8" + "source": "https://github.com/symfony/mime/tree/v6.1.11" }, "funding": [ { @@ -5865,27 +5901,27 @@ "type": "tidelift" } ], - "time": "2022-11-28T12:27:40+00:00" + "time": "2023-01-10T18:53:01+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.2.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "a549937e3d2da2753fdf816b05cc4fec8e5d68da" + "reference": "04b04b8e465e0fa84940e5609b6796a8b4e51bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/a549937e3d2da2753fdf816b05cc4fec8e5d68da", - "reference": "a549937e3d2da2753fdf816b05cc4fec8e5d68da", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/04b04b8e465e0fa84940e5609b6796a8b4e51bf1", + "reference": "04b04b8e465e0fa84940e5609b6796a8b4e51bf1", "shasum": "" }, "require": { "monolog/monolog": "^1.25.1|^2|^3", "php": ">=8.1", "symfony/http-kernel": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/console": "<5.4", @@ -5901,11 +5937,6 @@ "symfony/security-core": "^6.0", "symfony/var-dumper": "^5.4|^6.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", "autoload": { "psr-4": { @@ -5932,7 +5963,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.2.0" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.3.1" }, "funding": [ { @@ -5948,7 +5979,7 @@ "type": "tidelift" } ], - "time": "2022-10-20T07:00:24+00:00" + "time": "2023-06-08T11:13:32+00:00" }, { "name": "symfony/monolog-bundle", @@ -6033,16 +6064,16 @@ }, { "name": "symfony/notifier", - "version": "v6.0.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "1b81b376728538cdacbe3be6f750501f8c974451" + "reference": "99566882d0dee350a1434be4baa50585db0d6539" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/1b81b376728538cdacbe3be6f750501f8c974451", - "reference": "1b81b376728538cdacbe3be6f750501f8c974451", + "url": "https://api.github.com/repos/symfony/notifier/zipball/99566882d0dee350a1434be4baa50585db0d6539", + "reference": "99566882d0dee350a1434be4baa50585db0d6539", "shasum": "" }, "require": { @@ -6088,7 +6119,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v6.0.8" + "source": "https://github.com/symfony/notifier/tree/v6.0.19" }, "funding": [ { @@ -6104,25 +6135,25 @@ "type": "tidelift" } ], - "time": "2022-04-12T16:11:42+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "d28f02acde71ff75e957082cd36e973df395f626" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", - "reference": "d28f02acde71ff75e957082cd36e973df395f626", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -6155,7 +6186,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" }, "funding": [ { @@ -6171,20 +6202,20 @@ "type": "tidelift" } ], - "time": "2022-11-02T09:08:04+00:00" + "time": "2023-05-12T14:21:09+00:00" }, { "name": "symfony/password-hasher", - "version": "v6.2.0", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "955ce6bdbb53933897043ad00776a88ba916208a" + "reference": "d23ad221989e6b8278d050cabfd7b569eee84590" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/955ce6bdbb53933897043ad00776a88ba916208a", - "reference": "955ce6bdbb53933897043ad00776a88ba916208a", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/d23ad221989e6b8278d050cabfd7b569eee84590", + "reference": "d23ad221989e6b8278d050cabfd7b569eee84590", "shasum": "" }, "require": { @@ -6227,7 +6258,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.2.0" + "source": "https://github.com/symfony/password-hasher/tree/v6.3.0" }, "funding": [ { @@ -6243,7 +6274,7 @@ "type": "tidelift" } ], - "time": "2022-09-01T02:03:18+00:00" + "time": "2023-02-14T09:04:20+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -6829,6 +6860,83 @@ ], "time": "2022-11-03T14:55:06+00:00" }, + { + "name": "symfony/polyfill-php83", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + } + }, + "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 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, { "name": "symfony/polyfill-uuid", "version": "v1.27.0", @@ -6974,16 +7082,16 @@ }, { "name": "symfony/property-access", - "version": "v6.0.15", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "bdcd636b962c10eb3575dac41cf60a704da42c89" + "reference": "cae9aadf6e3a08315af666d4fede905fbb5b5393" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/bdcd636b962c10eb3575dac41cf60a704da42c89", - "reference": "bdcd636b962c10eb3575dac41cf60a704da42c89", + "url": "https://api.github.com/repos/symfony/property-access/zipball/cae9aadf6e3a08315af666d4fede905fbb5b5393", + "reference": "cae9aadf6e3a08315af666d4fede905fbb5b5393", "shasum": "" }, "require": { @@ -7033,7 +7141,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.0.15" + "source": "https://github.com/symfony/property-access/tree/v6.0.19" }, "funding": [ { @@ -7049,20 +7157,20 @@ "type": "tidelift" } ], - "time": "2022-10-26T20:57:43+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/property-info", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "5124bab2d32d521c592159bd4d13235fa3da0fe7" + "reference": "e6dfb2223b21768d3b2ae033a5e1f9d205184d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/5124bab2d32d521c592159bd4d13235fa3da0fe7", - "reference": "5124bab2d32d521c592159bd4d13235fa3da0fe7", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e6dfb2223b21768d3b2ae033a5e1f9d205184d45", + "reference": "e6dfb2223b21768d3b2ae033a5e1f9d205184d45", "shasum": "" }, "require": { @@ -7075,7 +7183,7 @@ "symfony/dependency-injection": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.10.4|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0", "symfony/cache": "^5.4|^6.0", @@ -7122,7 +7230,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.0.16" + "source": "https://github.com/symfony/property-info/tree/v6.0.19" }, "funding": [ { @@ -7138,20 +7246,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T07:33:41+00:00" + "time": "2023-01-15T17:21:41+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v6.0.6", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "aa68a86bc7df5ee9ff39107f122ebf1931d98ff8" + "reference": "905733405585e584596a2ea2874dad84a738daa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/aa68a86bc7df5ee9ff39107f122ebf1931d98ff8", - "reference": "aa68a86bc7df5ee9ff39107f122ebf1931d98ff8", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/905733405585e584596a2ea2874dad84a738daa8", + "reference": "905733405585e584596a2ea2874dad84a738daa8", "shasum": "" }, "require": { @@ -7188,7 +7296,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.0.6" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.0.19" }, "funding": [ { @@ -7204,24 +7312,25 @@ "type": "tidelift" } ], - "time": "2022-03-02T12:58:14+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/routing", - "version": "v6.2.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852" + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/857ac6f4df371470fbdefa2f5967a2618dbf1852", - "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", @@ -7230,7 +7339,7 @@ "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", "symfony/config": "^6.2", "symfony/dependency-injection": "^5.4|^6.0", @@ -7238,12 +7347,6 @@ "symfony/http-foundation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, "type": "library", "autoload": { "psr-4": { @@ -7276,7 +7379,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.0" + "source": "https://github.com/symfony/routing/tree/v6.3.3" }, "funding": [ { @@ -7292,20 +7395,20 @@ "type": "tidelift" } ], - "time": "2022-11-09T13:28:29+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.0.11", + "version": "v6.0.20", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "ba07e865bbcd9c23a2cb165947becb92f450b3bc" + "reference": "fbe14faff3dbae154d0004b254a201e930f3d8e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/ba07e865bbcd9c23a2cb165947becb92f450b3bc", - "reference": "ba07e865bbcd9c23a2cb165947becb92f450b3bc", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/fbe14faff3dbae154d0004b254a201e930f3d8e0", + "reference": "fbe14faff3dbae154d0004b254a201e930f3d8e0", "shasum": "" }, "require": { @@ -7320,7 +7423,7 @@ "symfony/password-hasher": "^5.4|^6.0", "symfony/security-core": "^5.4|^6.0", "symfony/security-csrf": "^5.4|^6.0", - "symfony/security-http": "^5.4|^6.0" + "symfony/security-http": "^5.4.20|~6.0.20|~6.1.12|^6.2.6" }, "conflict": { "symfony/browser-kit": "<5.4", @@ -7330,7 +7433,7 @@ "symfony/twig-bundle": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.10.4|^2", "symfony/asset": "^5.4|^6.0", "symfony/browser-kit": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -7376,7 +7479,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.0.11" + "source": "https://github.com/symfony/security-bundle/tree/v6.0.20" }, "funding": [ { @@ -7392,27 +7495,28 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:45:53+00:00" + "time": "2023-01-30T15:41:07+00:00" }, { "name": "symfony/security-core", - "version": "v6.2.0", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14" + "reference": "b86ce012cc9a62a15ed43af5037eebc3e6de4d7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14", - "reference": "aa8d792c3f4fd48f64e4be8f426a220c8fc8ac14", + "url": "https://api.github.com/repos/symfony/security-core/zipball/b86ce012cc9a62a15ed43af5037eebc3e6de4d7f", + "reference": "b86ce012cc9a62a15ed43af5037eebc3e6de4d7f", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^1.1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3", "symfony/password-hasher": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.6|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/event-dispatcher": "<5.4", @@ -7430,17 +7534,10 @@ "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/ldap": "^5.4|^6.0", + "symfony/string": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", "symfony/validator": "^5.4|^6.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", "autoload": { "psr-4": { @@ -7467,7 +7564,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.2.0" + "source": "https://github.com/symfony/security-core/tree/v6.3.3" }, "funding": [ { @@ -7483,20 +7580,20 @@ "type": "tidelift" } ], - "time": "2022-11-18T07:19:04+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/security-csrf", - "version": "v6.2.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "12d6ef4695f522566639e58b929d90e25b509379" + "reference": "63d7b098c448cbddb46ea5eda33b68c1ece6eb5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/12d6ef4695f522566639e58b929d90e25b509379", - "reference": "12d6ef4695f522566639e58b929d90e25b509379", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/63d7b098c448cbddb46ea5eda33b68c1ece6eb5b", + "reference": "63d7b098c448cbddb46ea5eda33b68c1ece6eb5b", "shasum": "" }, "require": { @@ -7509,9 +7606,6 @@ "require-dev": { "symfony/http-foundation": "^5.4|^6.0" }, - "suggest": { - "symfony/http-foundation": "For using the class SessionTokenStorage." - }, "type": "library", "autoload": { "psr-4": { @@ -7538,7 +7632,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v6.2.0" + "source": "https://github.com/symfony/security-csrf/tree/v6.3.2" }, "funding": [ { @@ -7554,20 +7648,20 @@ "type": "tidelift" } ], - "time": "2022-11-21T18:36:40+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/security-http", - "version": "v6.1.7", + "version": "v6.1.12", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "931b037cfd98e3f8c06a311e9c04abc9ee010ab9" + "reference": "e671c9748c439492c4a2d07862ee63a9a6fbf5c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/931b037cfd98e3f8c06a311e9c04abc9ee010ab9", - "reference": "931b037cfd98e3f8c06a311e9c04abc9ee010ab9", + "url": "https://api.github.com/repos/symfony/security-http/zipball/e671c9748c439492c4a2d07862ee63a9a6fbf5c1", + "reference": "e671c9748c439492c4a2d07862ee63a9a6fbf5c1", "shasum": "" }, "require": { @@ -7576,7 +7670,7 @@ "symfony/http-kernel": "^6.1", "symfony/polyfill-mbstring": "~1.0", "symfony/property-access": "^5.4|^6.0", - "symfony/security-core": "^5.4.7|^6.0" + "symfony/security-core": "^5.4.19|~6.0.19|~6.1.11|^6.2.5" }, "conflict": { "symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9", @@ -7621,7 +7715,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.1.7" + "source": "https://github.com/symfony/security-http/tree/v6.1.12" }, "funding": [ { @@ -7637,7 +7731,7 @@ "type": "tidelift" } ], - "time": "2022-10-23T10:33:34+00:00" + "time": "2023-01-30T15:43:30+00:00" }, { "name": "symfony/serializer", @@ -7742,16 +7836,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.1.1", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { @@ -7761,13 +7855,10 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7807,7 +7898,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -7823,20 +7914,20 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:18:58+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.0.13", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a" + "reference": "011e781839dd1d2eb8119f65ac516a530f60226d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", - "reference": "7554fde6848af5ef1178f8ccbdbdb8ae1092c70a", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/011e781839dd1d2eb8119f65ac516a530f60226d", + "reference": "011e781839dd1d2eb8119f65ac516a530f60226d", "shasum": "" }, "require": { @@ -7869,7 +7960,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.13" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.19" }, "funding": [ { @@ -7885,20 +7976,20 @@ "type": "tidelift" } ], - "time": "2022-09-28T15:52:47+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/string", - "version": "v6.0.15", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771" + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/51ac0fa0ccf132a00519b87c97e8f775fa14e771", - "reference": "51ac0fa0ccf132a00519b87c97e8f775fa14e771", + "url": "https://api.github.com/repos/symfony/string/zipball/d9e72497367c23e08bf94176d2be45b00a9d232a", + "reference": "d9e72497367c23e08bf94176d2be45b00a9d232a", "shasum": "" }, "require": { @@ -7954,7 +8045,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.15" + "source": "https://github.com/symfony/string/tree/v6.0.19" }, "funding": [ { @@ -7970,20 +8061,20 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:08+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/translation", - "version": "v6.0.14", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "6f99eb179aee4652c0a7cd7c11f2a870d904330c" + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/6f99eb179aee4652c0a7cd7c11f2a870d904330c", - "reference": "6f99eb179aee4652c0a7cd7c11f2a870d904330c", + "url": "https://api.github.com/repos/symfony/translation/zipball/9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", + "reference": "9c24b3fdbbe9fb2ef3a6afd8bbaadfd72dad681f", "shasum": "" }, "require": { @@ -8049,7 +8140,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.14" + "source": "https://github.com/symfony/translation/tree/v6.0.19" }, "funding": [ { @@ -8065,32 +8156,29 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:02:12+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/translation-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -8130,7 +8218,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -8146,20 +8234,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-05-30T17:17:10+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "5a0b963fbe5c394e1b083399430b113982ad67a8" + "reference": "bcd79f7845f887defec9d6737a535a3c602159e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/5a0b963fbe5c394e1b083399430b113982ad67a8", - "reference": "5a0b963fbe5c394e1b083399430b113982ad67a8", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bcd79f7845f887defec9d6737a535a3c602159e9", + "reference": "bcd79f7845f887defec9d6737a535a3c602159e9", "shasum": "" }, "require": { @@ -8178,8 +8266,8 @@ "symfony/workflow": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", - "egulias/email-validator": "^2.1.10|^3", + "doctrine/annotations": "^1.12|^2", + "egulias/email-validator": "^2.1.10|^3|^4", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/asset": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -8250,7 +8338,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.0.16" + "source": "https://github.com/symfony/twig-bridge/tree/v6.0.19" }, "funding": [ { @@ -8266,20 +8354,20 @@ "type": "tidelift" } ], - "time": "2022-11-04T07:39:59+00:00" + "time": "2023-01-11T11:50:03+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.0.8", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "0c5bb02150d08fa3174d8cd7600496a51702360a" + "reference": "13ce8cae82ca5870aabfcfd2e8d4bd03d3d843d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/0c5bb02150d08fa3174d8cd7600496a51702360a", - "reference": "0c5bb02150d08fa3174d8cd7600496a51702360a", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/13ce8cae82ca5870aabfcfd2e8d4bd03d3d843d5", + "reference": "13ce8cae82ca5870aabfcfd2e8d4bd03d3d843d5", "shasum": "" }, "require": { @@ -8298,7 +8386,7 @@ "symfony/translation": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", + "doctrine/annotations": "^1.10.4|^2", "symfony/asset": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", @@ -8337,7 +8425,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.0.8" + "source": "https://github.com/symfony/twig-bundle/tree/v6.0.19" }, "funding": [ { @@ -8353,20 +8441,20 @@ "type": "tidelift" } ], - "time": "2022-04-03T13:04:20+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/uid", - "version": "v6.0.13", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3" + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3", - "reference": "db426b27173f5e2d8b960dd10fa8ce19ea9ca5f3", + "url": "https://api.github.com/repos/symfony/uid/zipball/6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", + "reference": "6499e28b0ac9f2aa3151e11845bdb5cd21e6bb9d", "shasum": "" }, "require": { @@ -8411,7 +8499,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.0.13" + "source": "https://github.com/symfony/uid/tree/v6.0.19" }, "funding": [ { @@ -8427,20 +8515,20 @@ "type": "tidelift" } ], - "time": "2022-09-09T09:33:56+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/validator", - "version": "v6.0.15", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "241c97afb56b08c084f8017105f8638c74faaf46" + "reference": "8e41a2dc215903964175ca8bdc884297f021d31c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/241c97afb56b08c084f8017105f8638c74faaf46", - "reference": "241c97afb56b08c084f8017105f8638c74faaf46", + "url": "https://api.github.com/repos/symfony/validator/zipball/8e41a2dc215903964175ca8bdc884297f021d31c", + "reference": "8e41a2dc215903964175ca8bdc884297f021d31c", "shasum": "" }, "require": { @@ -8463,8 +8551,8 @@ "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.13", - "egulias/email-validator": "^2.1.10|^3", + "doctrine/annotations": "^1.13|^2", + "egulias/email-validator": "^2.1.10|^3|^4", "symfony/cache": "^5.4|^6.0", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", @@ -8519,7 +8607,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.0.15" + "source": "https://github.com/symfony/validator/tree/v6.0.19" }, "funding": [ { @@ -8535,42 +8623,38 @@ "type": "tidelift" } ], - "time": "2022-10-28T16:22:58+00:00" + "time": "2023-01-15T17:21:41+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.1", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "1e7544c8698627b908657e5276854d52ab70087a" + "reference": "77fb4f2927f6991a9843633925d111147449ee7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1e7544c8698627b908657e5276854d52ab70087a", - "reference": "1e7544c8698627b908657e5276854d52ab70087a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/77fb4f2927f6991a9843633925d111147449ee7a", + "reference": "77fb4f2927f6991a9843633925d111147449ee7a", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, "bin": [ "Resources/bin/var-dump-server" ], @@ -8607,7 +8691,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.1" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.3" }, "funding": [ { @@ -8623,20 +8707,20 @@ "type": "tidelift" } ], - "time": "2022-12-03T22:32:58+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.2.1", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "8a3f442d48567a5447e984ce9e86875ed768304a" + "reference": "3400949782c0cb5b3e73aa64cfd71dde000beccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8a3f442d48567a5447e984ce9e86875ed768304a", - "reference": "8a3f442d48567a5447e984ce9e86875ed768304a", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/3400949782c0cb5b3e73aa64cfd71dde000beccc", + "reference": "3400949782c0cb5b3e73aa64cfd71dde000beccc", "shasum": "" }, "require": { @@ -8676,12 +8760,12 @@ "export", "hydrate", "instantiate", - "lazy loading", + "lazy-loading", "proxy", "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.2.1" + "source": "https://github.com/symfony/var-exporter/tree/v6.3.2" }, "funding": [ { @@ -8697,20 +8781,20 @@ "type": "tidelift" } ], - "time": "2022-12-03T22:32:58+00:00" + "time": "2023-07-26T17:39:03+00:00" }, { "name": "symfony/web-link", - "version": "v6.0.3", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "52d6af6c4476c8ebdef968cb39030826253eb5e4" + "reference": "65cbc32c8177cfec22afde261e54533c408e5fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/52d6af6c4476c8ebdef968cb39030826253eb5e4", - "reference": "52d6af6c4476c8ebdef968cb39030826253eb5e4", + "url": "https://api.github.com/repos/symfony/web-link/zipball/65cbc32c8177cfec22afde261e54533c408e5fa0", + "reference": "65cbc32c8177cfec22afde261e54533c408e5fa0", "shasum": "" }, "require": { @@ -8767,7 +8851,7 @@ "push" ], "support": { - "source": "https://github.com/symfony/web-link/tree/v6.0.3" + "source": "https://github.com/symfony/web-link/tree/v6.0.19" }, "funding": [ { @@ -8783,20 +8867,20 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:55:41+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/webpack-encore-bundle", - "version": "v1.16.0", + "version": "v1.17.1", "source": { "type": "git", "url": "https://github.com/symfony/webpack-encore-bundle.git", - "reference": "bb399930c0299866258b616a74a27b50b94c5d45" + "reference": "7e3b6f69bcfcbb40ecfe83ad7a77e44316d26573" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/bb399930c0299866258b616a74a27b50b94c5d45", - "reference": "bb399930c0299866258b616a74a27b50b94c5d45", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/7e3b6f69bcfcbb40ecfe83ad7a77e44316d26573", + "reference": "7e3b6f69bcfcbb40ecfe83ad7a77e44316d26573", "shasum": "" }, "require": { @@ -8840,7 +8924,7 @@ "description": "Integration with your Symfony app & Webpack Encore!", "support": { "issues": "https://github.com/symfony/webpack-encore-bundle/issues", - "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.16.0" + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v1.17.1" }, "funding": [ { @@ -8856,20 +8940,20 @@ "type": "tidelift" } ], - "time": "2022-10-18T15:21:06+00:00" + "time": "2023-05-29T00:18:01+00:00" }, { "name": "symfony/yaml", - "version": "v6.0.16", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b" + "reference": "deec3a812a0305a50db8ae689b183f43d915c884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b", - "reference": "eb85bd1b0b297e976f3ada52ad239ef80b4dbd0b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/deec3a812a0305a50db8ae689b183f43d915c884", + "reference": "deec3a812a0305a50db8ae689b183f43d915c884", "shasum": "" }, "require": { @@ -8914,7 +8998,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.0.16" + "source": "https://github.com/symfony/yaml/tree/v6.0.19" }, "funding": [ { @@ -8930,20 +9014,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T18:58:46+00:00" + "time": "2023-01-11T11:50:03+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.4.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "2e58256b0e9fe52f30149347c0547e4633304765" + "reference": "802cc2dd46ec88285d6c7fa85c26ab7f2cd5bc49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/2e58256b0e9fe52f30149347c0547e4633304765", - "reference": "2e58256b0e9fe52f30149347c0547e4633304765", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/802cc2dd46ec88285d6c7fa85c26ab7f2cd5bc49", + "reference": "802cc2dd46ec88285d6c7fa85c26ab7f2cd5bc49", "shasum": "" }, "require": { @@ -8964,11 +9048,6 @@ "twig/string-extra": "^2.12|^3.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { "psr-4": { "Twig\\Extra\\TwigExtraBundle\\": "" @@ -8997,7 +9076,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.4.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.7.0" }, "funding": [ { @@ -9009,20 +9088,20 @@ "type": "tidelift" } ], - "time": "2022-01-04T13:58:53+00:00" + "time": "2023-05-06T11:11:46+00:00" }, { "name": "twig/twig", - "version": "v3.4.3", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58" + "reference": "5cf942bbab3df42afa918caeba947f1b690af64b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58", - "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/5cf942bbab3df42afa918caeba947f1b690af64b", + "reference": "5cf942bbab3df42afa918caeba947f1b690af64b", "shasum": "" }, "require": { @@ -9031,15 +9110,10 @@ "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { "psr-4": { "Twig\\": "src/" @@ -9073,7 +9147,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.4.3" + "source": "https://github.com/twigphp/Twig/tree/v3.7.0" }, "funding": [ { @@ -9085,7 +9159,7 @@ "type": "tidelift" } ], - "time": "2022-09-28T08:42:51+00:00" + "time": "2023-07-26T07:16:09+00:00" }, { "name": "webmozart/assert", @@ -9149,38 +9223,38 @@ "packages-dev": [ { "name": "doctrine/data-fixtures", - "version": "1.5.3", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42" + "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/ba37bfb776de763c5bf04a36d074cd5f5a083c42", - "reference": "ba37bfb776de763c5bf04a36d074cd5f5a083c42", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4", + "reference": "4af35dadbfcf4b00abb2a217c4c8c8800cf5fcf4", "shasum": "" }, "require": { - "doctrine/common": "^2.13|^3.0", - "doctrine/persistence": "^1.3.3|^2.0|^3.0", + "doctrine/deprecations": "^0.5.3 || ^1.0", + "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", "php": "^7.2 || ^8.0" }, "conflict": { "doctrine/dbal": "<2.13", + "doctrine/orm": "<2.12", "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0", + "doctrine/coding-standard": "^11.0", "doctrine/dbal": "^2.13 || ^3.0", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", - "doctrine/orm": "^2.7.0", + "doctrine/orm": "^2.12", "ext-sqlite3": "*", - "jangregor/phpstan-prophecy": "^1", "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^8.5 || ^9.5", + "phpunit/phpunit": "^8.5 || ^9.5 || ^10.0", "symfony/cache": "^5.0 || ^6.0", - "vimeo/psalm": "^4.10" + "vimeo/psalm": "^4.10 || ^5.9" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -9191,7 +9265,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + "Doctrine\\Common\\DataFixtures\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9211,7 +9285,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.5.3" + "source": "https://github.com/doctrine/data-fixtures/tree/1.6.6" }, "funding": [ { @@ -9227,20 +9301,20 @@ "type": "tidelift" } ], - "time": "2022-04-19T10:01:44+00:00" + "time": "2023-04-20T13:08:54+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.4.2", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5" + "reference": "9ec3139c52a42e94c9fd1e95f8d2bca94326edfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/601988c5b46dbd20a0f886f967210aba378a6fd5", - "reference": "601988c5b46dbd20a0f886f967210aba378a6fd5", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/9ec3139c52a42e94c9fd1e95f8d2bca94326edfb", + "reference": "9ec3139c52a42e94c9fd1e95f8d2bca94326edfb", "shasum": "" }, "require": { @@ -9294,7 +9368,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.2" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.4.4" }, "funding": [ { @@ -9310,30 +9384,28 @@ "type": "tidelift" } ], - "time": "2022-04-28T17:58:29+00:00" + "time": "2023-05-02T15:12:16+00:00" }, { "name": "masterminds/html5", - "version": "2.7.6", + "version": "2.8.1", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947" + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", - "reference": "897eb517a343a2281f11bc5556d6548db7d93947", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-dom": "*", - "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" }, "type": "library", "extra": { @@ -9377,22 +9449,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" }, - "time": "2022-08-18T16:18:26+00:00" + "time": "2023-05-10T11:58:31+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.2", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + "reference": "19526a33fb561ef417e822e85f08a00db4059c17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17", + "reference": "19526a33fb561ef417e822e85f08a00db4059c17", "shasum": "" }, "require": { @@ -9433,9 +9505,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0" }, - "time": "2022-11-12T15:38:23+00:00" + "time": "2023-06-25T14:52:30+00:00" }, { "name": "phar-io/manifest", @@ -9550,23 +9622,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.20", + "version": "9.2.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "af7463c955007de36db0c5e26d03e2f933c2e980" + "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/af7463c955007de36db0c5e26d03e2f933c2e980", - "reference": "af7463c955007de36db0c5e26d03e2f933c2e980", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1", + "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -9581,8 +9653,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -9615,7 +9687,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.20" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27" }, "funding": [ { @@ -9623,7 +9696,7 @@ "type": "github" } ], - "time": "2022-12-13T07:49:28+00:00" + "time": "2023-07-26T13:44:30+00:00" }, { "name": "phpunit/php-file-iterator", @@ -9868,20 +9941,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.27", + "version": "9.6.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", - "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a6d351645c3fe5a30f5e86be6577d946af65a328", + "reference": "a6d351645c3fe5a30f5e86be6577d946af65a328", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -9910,8 +9983,8 @@ "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -9919,7 +9992,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -9950,7 +10023,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.10" }, "funding": [ { @@ -9966,7 +10040,7 @@ "type": "tidelift" } ], - "time": "2022-12-09T07:31:23+00:00" + "time": "2023-07-10T04:04:23+00:00" }, { "name": "sebastian/cli-parser", @@ -10268,16 +10342,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -10322,7 +10396,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" }, "funding": [ { @@ -10330,20 +10404,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -10385,7 +10459,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -10393,7 +10467,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -10707,16 +10781,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -10755,10 +10829,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -10766,7 +10840,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -10825,16 +10899,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -10869,7 +10943,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -10877,7 +10951,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -10934,16 +11008,16 @@ }, { "name": "symfony/browser-kit", - "version": "v6.0.11", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "92e4b59bf2ef0f7a01d2620c4c87108e5c143d36" + "reference": "4d1bf7886e2af0a194332486273debcd6662cfc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/92e4b59bf2ef0f7a01d2620c4c87108e5c143d36", - "reference": "92e4b59bf2ef0f7a01d2620c4c87108e5c143d36", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/4d1bf7886e2af0a194332486273debcd6662cfc9", + "reference": "4d1bf7886e2af0a194332486273debcd6662cfc9", "shasum": "" }, "require": { @@ -10985,7 +11059,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.0.11" + "source": "https://github.com/symfony/browser-kit/tree/v6.0.19" }, "funding": [ { @@ -11001,20 +11075,20 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:26+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/css-selector", - "version": "v6.0.11", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ab2746acddc4f03a7234c8441822ac5d5c63efe9" + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab2746acddc4f03a7234c8441822ac5d5c63efe9", - "reference": "ab2746acddc4f03a7234c8441822ac5d5c63efe9", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f1d00bddb83a4cb2138564b2150001cb6ce272b1", + "reference": "f1d00bddb83a4cb2138564b2150001cb6ce272b1", "shasum": "" }, "require": { @@ -11050,7 +11124,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.11" + "source": "https://github.com/symfony/css-selector/tree/v6.0.19" }, "funding": [ { @@ -11066,20 +11140,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:10:44+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/debug-bundle", - "version": "v6.0.11", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "78426ad77ab9d2429e20354bf7dc56c966205848" + "reference": "9890e76f4b03d253327108fbf70b0465cee9f99c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/78426ad77ab9d2429e20354bf7dc56c966205848", - "reference": "78426ad77ab9d2429e20354bf7dc56c966205848", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/9890e76f4b03d253327108fbf70b0465cee9f99c", + "reference": "9890e76f4b03d253327108fbf70b0465cee9f99c", "shasum": "" }, "require": { @@ -11128,7 +11202,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v6.0.11" + "source": "https://github.com/symfony/debug-bundle/tree/v6.0.19" }, "funding": [ { @@ -11144,20 +11218,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:45:53+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.2.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7" + "reference": "8aa333f41f05afc7fc285a976b58272fd90fc212" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c079db42bed39928fc77a24307cbfff7ac7757f7", - "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8aa333f41f05afc7fc285a976b58272fd90fc212", + "reference": "8aa333f41f05afc7fc285a976b58272fd90fc212", "shasum": "" }, "require": { @@ -11169,9 +11243,6 @@ "require-dev": { "symfony/css-selector": "^5.4|^6.0" }, - "suggest": { - "symfony/css-selector": "" - }, "type": "library", "autoload": { "psr-4": { @@ -11198,7 +11269,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.2.0" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.1" }, "funding": [ { @@ -11214,20 +11285,20 @@ "type": "tidelift" } ], - "time": "2022-11-02T09:08:04+00:00" + "time": "2023-06-05T15:30:22+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.48.0", + "version": "v1.50.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6" + "reference": "a1733f849b999460c308e66f6392fb09b621fa86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/2e428e8432e9879187672fe08f1cc335e2a31dd6", - "reference": "2e428e8432e9879187672fe08f1cc335e2a31dd6", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a1733f849b999460c308e66f6392fb09b621fa86", + "reference": "a1733f849b999460c308e66f6392fb09b621fa86", "shasum": "" }, "require": { @@ -11241,7 +11312,8 @@ "symfony/filesystem": "^5.4.7|^6.0", "symfony/finder": "^5.4.3|^6.0", "symfony/framework-bundle": "^5.4.7|^6.0", - "symfony/http-kernel": "^5.4.7|^6.0" + "symfony/http-kernel": "^5.4.7|^6.0", + "symfony/process": "^5.4.7|^6.0" }, "conflict": { "doctrine/doctrine-bundle": "<2.4", @@ -11253,9 +11325,8 @@ "doctrine/doctrine-bundle": "^2.4", "doctrine/orm": "^2.10.0", "symfony/http-client": "^5.4.7|^6.0", - "symfony/phpunit-bridge": "^5.4.7|^6.0", + "symfony/phpunit-bridge": "^5.4.17|^6.0", "symfony/polyfill-php80": "^1.16.0", - "symfony/process": "^5.4.7|^6.0", "symfony/security-core": "^5.4.7|^6.0", "symfony/yaml": "^5.4.3|^6.0", "twig/twig": "^2.0|^3.0" @@ -11285,13 +11356,14 @@ "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", "keywords": [ "code generator", + "dev", "generator", "scaffold", "scaffolding" ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.48.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.50.0" }, "funding": [ { @@ -11307,20 +11379,20 @@ "type": "tidelift" } ], - "time": "2022-11-14T10:48:46+00:00" + "time": "2023-07-10T18:21:57+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.2.0", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df" + "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/1bd3b17db6d2ec284efbdc916600e880d6d858df", - "reference": "1bd3b17db6d2ec284efbdc916600e880d6d858df", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e020e1efbd1b42cb670fcd7d19a25abbddba035d", + "reference": "e020e1efbd1b42cb670fcd7d19a25abbddba035d", "shasum": "" }, "require": { @@ -11330,11 +11402,9 @@ "phpunit/phpunit": "<7.5|9.1.2" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3.0", - "symfony/error-handler": "^5.4|^6.0" - }, - "suggest": { - "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/polyfill-php81": "^1.27" }, "bin": [ "bin/simple-phpunit" @@ -11374,7 +11444,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.0" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.2" }, "funding": [ { @@ -11390,20 +11460,20 @@ "type": "tidelift" } ], - "time": "2022-11-18T19:08:09+00:00" + "time": "2023-07-12T16:00:22+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.0.14", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "1cb5000dd0eb125aa465f757b5d09201e556fa87" + "reference": "326d9b572c227fa5661cdeb3bf4b938049f51bf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/1cb5000dd0eb125aa465f757b5d09201e556fa87", - "reference": "1cb5000dd0eb125aa465f757b5d09201e556fa87", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/326d9b572c227fa5661cdeb3bf4b938049f51bf0", + "reference": "326d9b572c227fa5661cdeb3bf4b938049f51bf0", "shasum": "" }, "require": { @@ -11453,7 +11523,7 @@ "description": "Provides a development tool that gives detailed information about the execution of any request", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.0.14" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.0.19" }, "funding": [ { @@ -11469,7 +11539,7 @@ "type": "tidelift" } ], - "time": "2022-10-02T08:16:40+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/packages/messenger.yaml b/config/packages/messenger.yaml index b9144cccf..f48ea3fe4 100644 --- a/config/packages/messenger.yaml +++ b/config/packages/messenger.yaml @@ -25,3 +25,4 @@ framework: #'App\Message\BackgroundQueueItem': async_priority_low 'App\Message\PriorityQueueItem': sync 'App\Message\BackgroundQueueItem': sync + 'App\Message\ScanMessage': async_priority_high diff --git a/docker-compose.nginx.yml b/docker-compose.nginx.yml index 1a00f70f2..10e54c4bf 100644 --- a/docker-compose.nginx.yml +++ b/docker-compose.nginx.yml @@ -43,6 +43,7 @@ services: - type: bind source: ./build/nginx/php-custom.ini target: /usr/local/etc/php/conf.d/php-custom.ini + image: php env_file: - .env composer: @@ -66,6 +67,15 @@ services: yarn install && yarn build' + messenger-consume: + image: php + volumes: + - ./:/var/www/html + command: > + bash -c "sleep 15 && bin/console messenger:consume async_priority_high" + depends_on: + - db + volumes: web: dbdata: diff --git a/src/Controller/SyncController.php b/src/Controller/SyncController.php index d91573269..3be9cb494 100644 --- a/src/Controller/SyncController.php +++ b/src/Controller/SyncController.php @@ -2,8 +2,10 @@ namespace App\Controller; +use App\Message\ScanMessage; use App\Entity\Course; use App\Entity\ContentItem; +use App\Entity\ProgressBar; use App\Repository\CourseRepository; use App\Response\ApiResponse; use App\Services\LmsApiService; @@ -12,6 +14,8 @@ use App\Services\UtilityService; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Messenger\MessageBusInterface; +use Doctrine\Persistence\ManagerRegistry; class SyncController extends ApiController { @@ -20,8 +24,20 @@ class SyncController extends ApiController /** @var UtilityService $util */ protected $util; + #[Route('/api/progress', name: 'progress')] + public function progress(ManagerRegistry $doctrine) { + $progressRepo = $doctrine->getManager()->getRepository(ProgressBar::class); + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + $data = [ + 'total' => $progressBar->getTotal(), + 'progress' => $progressBar->getProgress(), + 'title' => $progressBar->getTitle(), + ]; + return new JsonResponse($data); + } + #[Route('/api/sync/{course}', name: 'request_sync')] - public function requestSync(Course $course, LmsFetchService $lmsFetch) + public function requestSync(Course $course, LmsFetchService $lmsFetch, MessageBusInterface $bus) { $response = new ApiResponse(); $user = $this->getUser(); @@ -39,8 +55,27 @@ public function requestSync(Course $course, LmsFetchService $lmsFetch) throw new \Exception('msg.sync.course_inactive'); } - $lmsFetch->refreshLmsContent($course, $user); + $lmsFetch->refreshLmsContent($course, $user, $bus); + + $response->addMessage('msg.worker_started', 'success', 5000); + + } catch (\Exception $e) { + if ('msg.course_scanning' === $e->getMessage()) { + $response->addMessage($e->getMessage(), 'info', 0, false); + } else { + $response->addMessage($e->getMessage(), 'error', 0); + } + } + + return new JsonResponse($response); + } + + #[Route('/api/sync/getLatestReport/{course}', name: 'get_report', methods: ['GET'])] + public function getLatestReport(Course $course) { + $response = new ApiResponse(); + $reportArr = false; + try { $report = $course->getLatestReport(); if (!$report) { @@ -67,10 +102,11 @@ public function requestSync(Course $course, LmsFetchService $lmsFetch) $response->addMessage($e->getMessage(), 'error', 0); } } - + return new JsonResponse($response); } + #[Route('/api/sync/content/{contentItem}', name: 'content_sync', methods: ['GET'])] public function requestContentSync(ContentItem $contentItem, LmsFetchService $lmsFetch, PhpAllyService $phpAlly) { diff --git a/src/DoctrineMigrations/Version20210525163808.php b/src/DoctrineMigrations/Version20210525163808.php index a50dd2ad4..d01668c7e 100644 --- a/src/DoctrineMigrations/Version20210525163808.php +++ b/src/DoctrineMigrations/Version20210525163808.php @@ -24,6 +24,7 @@ public function up(Schema $schema): void $this->addSql('CREATE TABLE content_item (id INT AUTO_INCREMENT NOT NULL, course_id INT NOT NULL, title VARCHAR(255) NOT NULL, content_type VARCHAR(255) NOT NULL, lms_content_id VARCHAR(512) NOT NULL, updated DATETIME NOT NULL, metadata LONGTEXT DEFAULT NULL, published TINYINT(1) NOT NULL, active TINYINT(1) NOT NULL, body LONGTEXT DEFAULT NULL, url VARCHAR(255) DEFAULT NULL, INDEX IDX_D279C8DB591CC992 (course_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('CREATE TABLE course (id INT AUTO_INCREMENT NOT NULL, institution_id INT NOT NULL, title VARCHAR(255) NOT NULL, lms_account_id VARCHAR(255) DEFAULT NULL, lms_course_id VARCHAR(255) DEFAULT NULL, last_updated DATETIME DEFAULT NULL, active TINYINT(1) DEFAULT NULL, dirty TINYINT(1) DEFAULT NULL, lms_term_id INT DEFAULT NULL, INDEX IDX_169E6FB910405986 (institution_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('CREATE TABLE file_item (id INT AUTO_INCREMENT NOT NULL, course_id INT DEFAULT NULL, reviewed_by_id INT DEFAULT NULL, file_name VARCHAR(255) NOT NULL, file_type VARCHAR(32) NOT NULL, lms_file_id VARCHAR(255) NOT NULL, updated DATETIME DEFAULT NULL, metadata LONGTEXT DEFAULT NULL, status TINYINT(1) DEFAULT NULL, file_size VARCHAR(255) DEFAULT NULL, hidden TINYINT(1) DEFAULT NULL, reviewed TINYINT(1) DEFAULT NULL, lms_url VARCHAR(255) DEFAULT NULL, download_url VARCHAR(255) DEFAULT NULL, reviewed_on DATETIME DEFAULT NULL, active TINYINT(1) NOT NULL, INDEX IDX_96E74D70591CC992 (course_id), INDEX IDX_96E74D70FC6B21F1 (reviewed_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('CREATE TABLE progress_bar (id INT AUTO_INCREMENT NOT NULL, progress INT NOT NULL, total INT NOT NULL, title VARCHAR(255) CHARACTER SET utf8mb4 DEFAULT NULL COLLATE `utf8mb4_unicode_ci`, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB COMMENT = \'\' '); $this->addSql('CREATE TABLE institution (id INT AUTO_INCREMENT NOT NULL, title VARCHAR(255) NOT NULL, lms_domain VARCHAR(255) DEFAULT NULL, lms_id VARCHAR(64) DEFAULT NULL, lms_account_id VARCHAR(255) DEFAULT NULL, created DATETIME NOT NULL, status TINYINT(1) NOT NULL, vanity_url VARCHAR(255) DEFAULT NULL, metadata LONGTEXT DEFAULT NULL, api_client_id VARCHAR(255) DEFAULT NULL, api_client_secret VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('CREATE TABLE issue (id INT AUTO_INCREMENT NOT NULL, content_item_id INT NOT NULL, fixed_by_id INT DEFAULT NULL, scan_rule_id VARCHAR(255) NOT NULL, html LONGTEXT DEFAULT NULL, type VARCHAR(255) NOT NULL, status SMALLINT NOT NULL, fixed_on DATETIME DEFAULT NULL, preview_html LONGTEXT DEFAULT NULL, new_html LONGTEXT DEFAULT NULL, metadata JSON DEFAULT NULL, INDEX IDX_12AD233ECD678BED (content_item_id), INDEX IDX_12AD233EC38008F2 (fixed_by_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); $this->addSql('CREATE TABLE log_entry (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, course_id INT DEFAULT NULL, message LONGTEXT DEFAULT NULL, severity VARCHAR(255) NOT NULL, created DATETIME NOT NULL, status TINYINT(1) DEFAULT NULL, INDEX IDX_B5F762DA76ED395 (user_id), INDEX IDX_B5F762D591CC992 (course_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); @@ -61,6 +62,7 @@ public function down(Schema $schema): void $this->addSql('ALTER TABLE report DROP FOREIGN KEY FK_C42F7784F675F31B'); $this->addSql('DROP TABLE content_item'); $this->addSql('DROP TABLE course'); + $this->addSql('DROP TABLE progress_bar'); $this->addSql('DROP TABLE file_item'); $this->addSql('DROP TABLE institution'); $this->addSql('DROP TABLE issue'); diff --git a/src/Entity/ProgressBar.php b/src/Entity/ProgressBar.php new file mode 100644 index 000000000..3ca9f3711 --- /dev/null +++ b/src/Entity/ProgressBar.php @@ -0,0 +1,72 @@ +id; + } + + public function getProgress(): ?int + { + return $this->progress; + } + + public function getTotal(): ?int + { + return $this->total; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setProgress(int $progress): self + { + $this->progress = $progress; + return $this; + } + + public function setTitle(string $title): self + { + $this->title = $title; + + return $this; + } + + public function setTotal(int $total): self + { + $this->total = $total; + return $this; + } +} diff --git a/src/Message/ScanMessage.php b/src/Message/ScanMessage.php new file mode 100644 index 000000000..d6dc522e4 --- /dev/null +++ b/src/Message/ScanMessage.php @@ -0,0 +1,31 @@ +course = $course; + $this->user = $user; + } + + public function getContent(): array + { + return $this->contentItems; + } + + public function getCourse() + { + return $this->course; + } + + public function getUser() + { + return $this->user; + } +} diff --git a/src/MessageHandler/ScanMessageHandler.php b/src/MessageHandler/ScanMessageHandler.php new file mode 100644 index 000000000..22b11e104 --- /dev/null +++ b/src/MessageHandler/ScanMessageHandler.php @@ -0,0 +1,650 @@ +phpAlly = $phpAlly; + $this->doctrine = $doctrine; + $this->security = $security; + } + + const ISSUE_TYPE_SUGGESTION = 'suggestion'; + const ISSUE_TYPE_ERROR = 'error'; + + public function __invoke(ScanMessage $message) + { + $contentItemRepo = $this->doctrine->getManager()->getRepository(ContentItem::class); + $courseRepo = $this->doctrine->getManager()->getRepository(Course::class); + $userRepo = $this->doctrine->getManager()->getRepository(User::class); + $progressRepo = $this->doctrine->getManager()->getRepository(ProgressBar::class); + $fileItemRepo = $this->doctrine->getManager()->getRepository(FileItem::class); + + //Creates a progress bar in case one isn't already set up + $count = $progressRepo->count([]); + if($count == 0) { + $this->setUpProgressBar(); + } + + $course = $courseRepo->find($message->getCourse()); + $user = $userRepo->find($message->getUser()); + + /* Step 1: Update content + /* Update course status */ + $this->updateCourseData($course, $user); + + /* Mark content items as inactive */ + $contentItemRepo->setCourseContentInactive($course); + $fileItemRepo->setCourseFileItemsInactive($course); + $this->doctrine->getManager()->flush(); + + /* Update content items from LMS */ + $this->updateCourseContent($course, $user); + + /* Step 2: Get list of changed content items */ + $contentItems = $contentItemRepo->getUpdatedContentItems($course); + + /* Step 3: Delete issues for updated content items */ + $this->deleteContentItemIssues($contentItems); + + /* Step 4: Process the updated content with PhpAlly and link to report */ + $this->scanContentItems($contentItems, $progressRepo); + + /* Step 5: Update report from all active issues */ + $this->updateReport($course, $user); + + /* Save last_updated date on course */ + $course->setLastUpdated(new \DateTime('now', new \DateTimeZone('GMT'))); + $course->setDirty(false); + $this->doctrine->getManager()->flush(); + } + + public function createIssue(PhpAllyIssue $issue, ContentItem $contentItem) + { + $issueEntity = new Issue(); + $meta = $contentItem->getCourse()->getInstitution()->getMetadata(); + $issueType = self::ISSUE_TYPE_ERROR; + + if (isset($meta['SUGGESTION_RULES'])) { + if (isset($meta['SUGGESTION_RULES'][$issue->getRuleId()])) { + $issueType = self::ISSUE_TYPE_SUGGESTION; + } + } + if (isset($_ENV['PHPALLY_SUGGESTION_RULES'])) { + if (strpos($_ENV['PHPALLY_SUGGESTION_RULES'], $issue->getRuleId()) !== false) { + $issueType = self::ISSUE_TYPE_SUGGESTION; + } + } + + $contentItemRepo = $this->doctrine->getManager()->getRepository(ContentItem::class); + + $item = $contentItemRepo->find($contentItem->getId()); + + $issueEntity->setType($issueType); + $issueEntity->setStatus(Issue::$issueStatusActive); + $issueEntity->setContentItem($item); + $issueEntity->setScanRuleId($issue->getRuleId()); + $issueEntity->setHtml($issue->getHtml()); + $issueEntity->setPreviewHtml($issue->getPreview()); + $issueEntity->setMetadata($issue->getMetadata()); + + $contentItem->addIssue($issueEntity); + $this->doctrine->getManager()->persist($issueEntity); + return $issueEntity; + } + + public function updateReport(Course $course, User $user): Report + { + $contentFixed = $contentResolved = $filesReviewed = $errors = $suggestions = 0; + $scanRules = []; + + /** @var \App\Entity\ContentItem[] $contentItems */ + $contentItems = $course->getContentItems(); + + foreach ($contentItems as $contentItem) { + /** @var \App\Entity\Issue[] $issues */ + $issues = $contentItem->getIssues()->toArray(); + + foreach ($issues as $issue) { + if (Issue::$issueStatusFixed === $issue->getStatus()) { + $contentFixed++; + } else if (Issue::$issueStatusResolved === $issue->getStatus()) { + $contentResolved++; + } else { + if (Issue::$issueError === $issue->getType()) { + $errors++; + } else { + $suggestions++; + } + } + + /* Scan rule data */ + $ruleId = $issue->getScanRuleId(); + if (!isset($scanRules[$ruleId])) { + $scanRules[$ruleId] = 0; + } + + $scanRules[$ruleId]++; + } + } + + /** @var \App\Entity\FileItem[] $fileItems */ + $fileItems = $course->getFileItems(); + foreach ($fileItems as $file) { + if ($file->getReviewed()) { + $filesReviewed++; + } + } + + $latestReport = $course->getLatestReport(); + $now = new \DateTime('now', new \DateTimeZone('GMT')); + + if ($latestReport && ($now->format('m/d/y') === $latestReport->getCreated()->format('m/d/y'))) { + $report = $latestReport; + } + else { + $report = new Report(); + $report->setAuthor($user); + $report->setCourse($course); + $this->doctrine->getManager()->persist($report); + } + + $report->setCreated($now); + $report->setReady(false); + $report->setErrors($errors); + $report->setSuggestions($suggestions); + $report->setContentFixed($contentFixed); + $report->setContentResolved($contentResolved); + $report->setFilesReviewed($filesReviewed); + $report->setData(\json_encode(['scanRules' => $scanRules])); + + $this->doctrine->getManager()->flush(); + + return $report; + } + + private function scanContentItems(array $contentItems, $progressRepo) { + // Scan each update content item for issues + /** @var \App\Entity\ContentItem $contentItem */ + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + //If there are no issues to scan, nullify the progress bar such that + //the report can be sent + if(count($contentItems) == 0) { + $progressBar->setTotal(0); + $progressBar->setProgress(0); + $this->doctrine->getManager()->persist($progressBar); + $this->doctrine->getManager()->flush(); + } + $issueIndex = 0; + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + $total = count($contentItems); + $progressBar->setTotal($total); + $progressBar->setTitle("Scanning course."); + $this->doctrine->getManager()->persist($progressBar); + $this->doctrine->getManager()->flush(); + foreach($contentItems as $contentItem) { + try { + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + $issueIndex++; + $progressBar->setProgress($issueIndex); + $this->doctrine->getManager()->persist($progressBar); + $this->doctrine->getManager()->flush(); + // Scan Content Item with PHPAlly + $phpAllyReport = $this->phpAlly->scanContentItem($contentItem); + + if ($phpAllyReport) { + // TODO: Do something with report errors + if (count($phpAllyReport->getErrors())) { + foreach ($phpAllyReport->getErrors() as $error) { + $msg = $error . ', item = #' . $contentItem->getId(); + $this->createMessage($msg, 'error', $contentItem->getCourse(), null, true); + } + } + + // Add Issues to report + foreach ($phpAllyReport->getIssues() as $issue) { + // Create issue entity + $this->createIssue($issue, $contentItem); + } + } + } + catch (\Exception $e) { + $this->util->createMessage($e->getMessage(), 'error', null, null, true); + } + } + $entityManager = $this->doctrine->getManager(); + $this->doctrine->getManager()->flush(); + } + + public function deleteContentItemIssues($contentItems) + { + /** @var \App\Repository\IssueRepository $issueRepo */ + $issueRepo = $this->doctrine->getManager()->getRepository(Issue::class); + + foreach ($contentItems as $contentItem) { + $issueRepo->deleteContentItemIssues($contentItem); + } + } + + public function setUpProgressBar() { + $progressRepo = $this->doctrine->getManager()->getRepository(ProgressBar::class); + $entity = new ProgressBar(); + $entity->setProgress(0); + $entity->setTotal(0); + $this->doctrine->getManager()->persist($entity); + $this->doctrine->getManager()->flush(); + } + + public function createMessage($msg, $severity = 'info', Course $course = null, User $user = null, $hideFromUser = false) + { + if (!$user) { + $user = $this->security->getUser(); + } + + if (is_array($msg) || is_object($msg)) { + $msg = \json_encode($msg); + } + + $message = new LogEntry(); + $message->setMessage($msg); + $message->setSeverity($severity); + $message->setUser($user); + $message->setStatus($hideFromUser); + $message->setCreated(new \DateTime('now', new \DateTimeZone('GMT'))); + + if ($course) { + $message->setCourse($course); + } + + $this->doctrine->getManager()->persist($message); + $this->doctrine->getManager()->flush(); + } + + // Get content from Canvas and update content items + public function updateCourseContent(Course $course, User $user): array + { + $content = $contentItems = []; + $urls = $this->getCourseContentUrls($course->getLmsCourseId()); + $apiDomain = $this->getApiDomain($user); + $apiToken = $this->getApiToken($user); + $entityManager = $this->doctrine->getManager(); + $contentItemRepo = $entityManager->getRepository(ContentItem::class); + $progressRepo = $this->doctrine->getManager()->getRepository(ProgressBar::class); + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + + $canvasApi = new CanvasApi($apiDomain, $apiToken); + $itemIndex = 0; + + foreach ($urls as $contentType => $url) { + $response = $canvasApi->apiGet($url); + if ($response->getErrors()) { + $this->util->createMessage('Error retrieving content. Failed API Call: ' . $url, 'error', $course, $user); + } + else { + if ('syllabus' === $contentType) { + $contentList = [$response->getContent()]; + } + else { + $contentList = $response->getContent(); + } + + foreach ($contentList as $content) { + $progressBar = $progressRepo->findOneBy([], ['id' => 'ASC']); + $itemIndex++; + $progressBar->setProgress($itemIndex); + $progressBar->setTitle("Getting content from Canvas"); + $entityManager->persist($progressBar); + $entityManager->flush(); + if (('file' === $contentType) && (in_array($content['mime_class'], $this->getUnscannableFileMimeClasses()))) { + $this->updateFileItem($course, $content); + continue; + } + + /* Quizzes should not be counted as assignments */ + if (('assignment' === $contentType) && isset($content['quiz_id'])) { + continue; + } + /* Discussion topics set as assignments should be skipped */ + if (('assignment' === $contentType) && isset($content['discussion_topic'])) { + continue; + } + + $lmsContent = $this->normalizeLmsContent($course, $contentType, $content); + if (!$lmsContent) { + continue; + } + + /* get page content */ + if ('page' === $contentType) { + $url = "courses/{$course->getLmsCourseId()}/pages/{$lmsContent['id']}"; + $pageResponse = $canvasApi->apiGet($url); + $pageObj = $pageResponse->getContent(); + + if (!empty($pageObj['body'])) { + $lmsContent['body'] = $pageObj['body']; + } + } + + /* get HTML file content */ + if (('file' === $contentType) && ('html' === $content['mime_class'])) { + $lmsContent['body'] = file_get_contents($content['url']); + } + + $contentItem = $contentItemRepo->findOneBy([ + 'contentType' => $contentType, + 'lmsContentId' => $lmsContent['id'], + 'course' => $course, + ]); + + if (!$contentItem) { + $contentItem = new ContentItem(); + $contentItem->setCourse($course) + ->setLmsContentId($lmsContent['id']) + ->setActive(true) + ->setUpdated(new \DateTime('now', new \DateTimeZone('GMT'))) + ->setContentType($contentType); + $entityManager->persist($contentItem); + } + + // some content types don't have an updated date, so we'll compare content + // to find out if content has changed. + if (in_array($contentType, ['syllabus', 'discussion_topic', 'announcement', 'quiz'])) { + if ($contentItem->getBody() === $lmsContent['body']) { + if ($contentItem->getUpdated()) { + $lmsContent['updated'] = $contentItem->getUpdated()->format('c'); + } + } + } + + $contentItem->update($lmsContent); + $contentItems[] = $contentItem; + } + } + } + + // push any updates made to content items to DB + $entityManager->flush(); + + return $contentItems; + } + + public function updateCourseData(Course $course, User $user) + { + $url = "courses/{$course->getLmsCourseId()}?include[]=term"; + $apiDomain = $this->getApiDomain($user); + $apiToken = $this->getApiToken($user); + $entityManager = $this->doctrine->getManager(); + + $canvasApi = new CanvasApi($apiDomain, $apiToken); + $response = $canvasApi->apiGet($url); + + if (!$response || !empty($response->getErrors())) { + foreach ($response->getErrors() as $error) { + $this->util->createMessage($error, 'error', $course, $user); + } + return; + } + $content = $response->getContent(); + + $course->setTitle($content['name']); + $course->setLmsAccountId($content['account_id']); + $course->setActive(true); + + if (isset($content['term']['id'])) { + $course->setLmsTermId($content['term']['id']); + } + + $entityManager->flush(); + } + + + /********************** + * PROTECTED FUNCTIONS + **********************/ + + protected function getCourseContentUrls($courseId) + { + return [ + 'syllabus' => "courses/{$courseId}?include[]=syllabus_body", + 'announcement' => "courses/{$courseId}/discussion_topics?only_announcements=true", + 'assignment' => "courses/{$courseId}/assignments", + 'discussion_topic' => "courses/{$courseId}/discussion_topics", + 'file' => "courses/{$courseId}/files", + 'module' => "courses/{$courseId}/modules?include[]=items", + 'page' => "courses/{$courseId}/pages", + 'quiz' => "courses/{$courseId}/quizzes", + ]; + } + + protected function getApiDomain(User $user) + { + $institution = $user->getInstitution(); + + return $institution->getLmsDomain(); + } + + protected function getApiToken(User $user) + { + return $user->getApiKey(); + } + + protected function normalizeLmsContent(Course $course, $contentType, $lmsContent) + { + $out = []; + $domainName = $course->getInstitution()->getLmsDomain(); + $baseUrl = "https://{$domainName}/courses/{$course->getLmsCourseId()}"; + + switch ($contentType) { + case 'syllabus': + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['name']; + $out['updated'] = 'now'; + $out['status'] = false; + $out['url'] = "{$baseUrl}/assignments/syllabus"; + + if (array_key_exists('syllabus_body', $lmsContent)) { + $out['body'] = $lmsContent['syllabus_body']; + $out['status'] = true; + } + + break; + + case 'page': + $out['id'] = $lmsContent['url']; + $out['title'] = $lmsContent['title']; + $out['updated'] = $lmsContent['updated_at']; + $out['body'] = (!empty($lmsContent['body'])) ? $lmsContent['body'] : ''; + $out['status'] = $lmsContent['published']; + $out['url'] = "{$baseUrl}/pages/{$lmsContent['url']}"; + + break; + + case 'assignment': + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['name']; + $out['updated'] = $lmsContent['updated_at']; + $out['body'] = $lmsContent['description']; + $out['status'] = $lmsContent['published']; + $out['url'] = "{$baseUrl}/assignments/{$lmsContent['id']}"; + + break; + + case 'discussion_topic': + case 'announcement': + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['title']; + $out['updated'] = 'now'; + $out['body'] = $lmsContent['message']; + $out['status'] = $lmsContent['published']; + $out['url'] = "{$baseUrl}/discussion_topics/{$lmsContent['id']}"; + + break; + + case 'module': + if (!isset($lmsContent['items'])) { + break; + } + + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['name']; + $out['updated'] = 'now'; + + $body = ''; + foreach ($lmsContent['items'] as $item) { + if ('ExternalUrl' !== $item['type']) { + break; + } + $body .= "

{$item['title']}

"; + } + + $out['body'] = $body; + $out['status'] = $lmsContent['published']; + $out['url'] = "{$baseUrl}/modules"; + + break; + + case 'file': + if ('html' !== $lmsContent['mime_class']) { + break; + } + + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['display_name']; + $out['updated'] = $lmsContent['updated_at']; + $out['body'] = ''; + $out['status'] = !$lmsContent['hidden']; + $out['url'] = "{$baseUrl}/files?preview={$lmsContent['id']}"; + + if (isset($lmsContent['mime_class'])) { + $out['fileType'] = $lmsContent['mime_class']; + } + + break; + + case 'quiz': + $out['id'] = $lmsContent['id']; + $out['title'] = $lmsContent['title']; + $out['updated'] = 'now'; + $out['body'] = $lmsContent['description']; + $out['status'] = $lmsContent['published']; + $out['url'] = "{$baseUrl}/quizzes/{$lmsContent['id']}"; + + break; + } + + return $out; + } + + protected function getUnscannableFileMimeClasses() + { + return [ + 'pdf', + 'ppt', + 'doc', + 'xls', + ]; + } + + public function updateContentItem(ContentItem $contentItem) + { + $user = $this->security->getUser(); + $apiDomain = $this->getApiDomain($user); + $apiToken = $this->getApiToken($user); + $url = $this->getContentTypeUrl($contentItem); + $entityManager = $this->doctrine->getManager(); + $contentType = $contentItem->getContentType(); + + $canvasApi = new CanvasApi($apiDomain, $apiToken); + + $response = $canvasApi->apiGet($url); + + if ($response->getErrors()) { + $log = ''; + foreach ($response->getErrors() as $err) { + $log .= ' | Msg: ' . $err; + } + + $this->util->createMessage('Error retrieving content. Please try again.', 'error', $contentItem->getCourse(), $user); + $this->util->createMessage($log, 'error', $contentItem->getCourse(), $user, true); + } + else { + $apiContent = $response->getContent(); + $lmsContent = $this->normalizeLmsContent($contentItem->getCourse(), $contentType, $apiContent); + + /* get HTML file content */ + if ('file' === $contentType) { + if ('html' === $apiContent['mime_class']) { + $lmsContent['body'] = file_get_contents($apiContent['url']); + } + } + + $contentItem->update($lmsContent); + $entityManager->flush(); + } + } + + protected function updateFileItem(Course $course, $file) + { + $fileItemRepo = $this->doctrine->getManager()->getRepository(FileItem::class); + $entityManager = $this->doctrine->getManager(); + $fileItem = $fileItemRepo->findOneBy([ + 'lmsFileId' => $file['id'], + 'course' => $course, + ]); + + if (!$fileItem) { + $fileItem = new FileItem(); + $fileItem->setCourse($course) + ->setFileName($file['filename']) + ->setFileType($file['mime_class']) + ->setLmsFileId($file['id']) + ->setDownloadUrl($file['url']) + ->setActive(true); + $entityManager->persist($fileItem); + } + + $domainName = $course->getInstitution()->getLmsDomain(); + $lmsUrl = "https://{$domainName}/courses/{$course->getLmsCourseId()}/files?preview={$file['id']}"; + $fileItem->setLmsUrl($lmsUrl); + + // normalize file keys + $file['fileName'] = $file['filename']; + $file['fileType'] = $file['mime_class']; + $file['status'] = !$file['locked']; + $file['fileSize'] = $file['size']; + $file['updated'] = $file['updated_at']; + + $fileItem->update($file); + $entityManager = $this->doctrine->getManager(); + $entityManager->flush(); + } + +} diff --git a/src/Repository/ProgressBarRepository.php b/src/Repository/ProgressBarRepository.php new file mode 100644 index 000000000..422f45354 --- /dev/null +++ b/src/Repository/ProgressBarRepository.php @@ -0,0 +1,22 @@ +lmsApi->getLms($user); $this->lmsUser->validateApiKey($user); - - /** @var \App\Repository\ContentItemRepository $contentItemRepo */ - $contentItemRepo = $this->doctrine->getManager()->getRepository(ContentItem::class); - - /** @var \App\Repository\FileItemRepository $fileItemRepo */ - $fileItemRepo = $this->doctrine->getManager()->getRepository(FileItem::class); - - /* Step 1: Update content - /* Update course status */ - $lms->updateCourseData($course, $user); - - /* Mark content items as inactive */ - $contentItemRepo->setCourseContentInactive($course); - $fileItemRepo->setCourseFileItemsInactive($course); - $this->doctrine->getManager()->flush(); - - /* Update content items from LMS */ - $lms->updateCourseContent($course, $user); - - /* Step 2: Get list of changed content items */ - $contentItems = $contentItemRepo->getUpdatedContentItems($course); - - /* Step 3: Delete issues for updated content items */ - $this->deleteContentItemIssues($contentItems); - - /* Step 4: Process the updated content with PhpAlly and link to report */ - $this->scanContentItems($contentItems); - - /* Step 5: Update report from all active issues */ - $this->updateReport($course, $user); - - /* Save last_updated date on course */ - $course->setLastUpdated($this->util->getCurrentTime()); - $course->setDirty(false); - $this->doctrine->getManager()->flush(); + + //Begin scanning process + $bus->dispatch(new ScanMessage($course->getId(), $user->getId())); } // Refresh content item data from the LMS @@ -176,40 +146,6 @@ public function updateReport(Course $course, User $user): Report return $report; } - - // Performs PHPAlly scan on each Content Item. - private function scanContentItems(array $contentItems) - { - // Scan each update content item for issues - /** @var \App\Entity\ContentItem $contentItem */ - foreach ($contentItems as $contentItem) { - try { - // Scan Content Item with PHPAlly - $phpAllyReport = $this->phpAlly->scanContentItem($contentItem); - - if ($phpAllyReport) { - // TODO: Do something with report errors - if (count($phpAllyReport->getErrors())) { - foreach ($phpAllyReport->getErrors() as $error) { - $msg = $error . ', item = #' . $contentItem->getId(); - $this->util->createMessage($msg, 'error', $contentItem->getCourse(), null, true); - } - } - - // Add Issues to report - foreach ($phpAllyReport->getIssues() as $issue) { - // Create issue entity - $this->createIssue($issue, $contentItem); - } - } - } - catch (\Exception $e) { - $this->util->createMessage($e->getMessage(), 'error', null, null, true); - } - } - $this->doctrine->getManager()->flush(); - } - public function createIssue(PhpAllyIssue $issue, ContentItem $contentItem) { $issueEntity = new Issue(); diff --git a/src/Services/PhpAllyService.php b/src/Services/PhpAllyService.php index a8c0af5d6..62d0d6a88 100644 --- a/src/Services/PhpAllyService.php +++ b/src/Services/PhpAllyService.php @@ -12,13 +12,10 @@ class PhpAllyService { /** @var App\Service\HtmlService */ protected $htmlService; - protected $util; - - public function __construct(HtmlService $htmlService, UtilityService $util) + public function __construct(HtmlService $htmlService) { $this->phpAlly = new PhpAlly(); $this->htmlService = $htmlService; - $this->util = $util; } public function scanContentItem(ContentItem $contentItem) diff --git a/translations/en.json b/translations/en.json index 91cff0119..5733467f2 100644 --- a/translations/en.json +++ b/translations/en.json @@ -127,6 +127,7 @@ "msg.no_permissions": "You do not have permission to access the specified course.", "msg.course_scanning": "Course scanning...", + "msg.worker_started": "Scan request has been received.", "msg.no_new_content": "Course scan complete. No new content found.", "msg.new_content": "Course scan complete. New content has been added.", "msg.sync.started": "Course scan started.", @@ -382,4 +383,4 @@ "rule.label.SearchKeyWord": "Keyword found", "rule.desc.SearchKeyWord": "The keyword has been found" -} \ No newline at end of file +}