mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-03-14 20:33:40 +00:00
Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90fbfadfa4 | ||
|
|
7301cac8ca | ||
|
|
5ca028b885 | ||
|
|
7864c8b7ab |
4 changed files with 264 additions and 94 deletions
|
|
@ -25,7 +25,12 @@ class IcalResponseParser implements ResponseParser
|
|||
}
|
||||
|
||||
try {
|
||||
$this->parser->parseString($body);
|
||||
// Workaround for om/icalparser v4.0.0 bug where it fails if ORGANIZER or ATTENDEE has no parameters.
|
||||
// When ORGANIZER or ATTENDEE has no parameters (no semicolon after the key),
|
||||
// IcalParser::parseRow returns an empty string for $middle instead of an array,
|
||||
// which causes a type error in a foreach loop in IcalParser::parseString.
|
||||
$normalizedBody = preg_replace('/^(ORGANIZER|ATTENDEE):/m', '$1;CN=Unknown:', $body);
|
||||
$this->parser->parseString($normalizedBody);
|
||||
|
||||
$events = $this->parser->getEvents()->sorted()->getArrayCopy();
|
||||
$windowStart = now()->subDays(7);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"php": "^8.4",
|
||||
"ext-imagick": "*",
|
||||
"ext-simplexml": "*",
|
||||
"ext-zip": "*",
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
"laravel/tinker": "^2.10.1",
|
||||
"livewire/flux": "^2.0",
|
||||
"livewire/livewire": "^4.0",
|
||||
"om/icalparser": "^3.2",
|
||||
"om/icalparser": "^4.0",
|
||||
"spatie/browsershot": "^5.0",
|
||||
"spatie/laravel-settings": "^3.6",
|
||||
"stevebauman/purify": "^6.3",
|
||||
|
|
|
|||
184
composer.lock
generated
184
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "a1b56974da6a4f33fe847dba0549a6e0",
|
||||
"content-hash": "c13d003eb08beac106e67bfbeff85dd9",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aws/aws-crt-php",
|
||||
|
|
@ -62,16 +62,16 @@
|
|||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.372.1",
|
||||
"version": "3.373.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "a48ff951eaad7f038eca3e0e89f168048b99082b"
|
||||
"reference": "483fba51c28b3a0c0647bf5100e0edca82090b18"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a48ff951eaad7f038eca3e0e89f168048b99082b",
|
||||
"reference": "a48ff951eaad7f038eca3e0e89f168048b99082b",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/483fba51c28b3a0c0647bf5100e0edca82090b18",
|
||||
"reference": "483fba51c28b3a0c0647bf5100e0edca82090b18",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -92,12 +92,12 @@
|
|||
"aws/aws-php-sns-message-validator": "~1.0",
|
||||
"behat/behat": "~3.0",
|
||||
"composer/composer": "^2.7.8",
|
||||
"dms/phpunit-arraysubset-asserts": "^0.4.0",
|
||||
"dms/phpunit-arraysubset-asserts": "^v0.5.0",
|
||||
"doctrine/cache": "~1.4",
|
||||
"ext-dom": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-sockets": "*",
|
||||
"phpunit/phpunit": "^9.6",
|
||||
"phpunit/phpunit": "^10.0",
|
||||
"psr/cache": "^2.0 || ^3.0",
|
||||
"psr/simple-cache": "^2.0 || ^3.0",
|
||||
"sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0",
|
||||
|
|
@ -153,9 +153,9 @@
|
|||
"support": {
|
||||
"forum": "https://github.com/aws/aws-sdk-php/discussions",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.372.1"
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.373.2"
|
||||
},
|
||||
"time": "2026-03-06T21:27:21+00:00"
|
||||
"time": "2026-03-13T18:08:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
|
|
@ -1435,16 +1435,16 @@
|
|||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "2.8.0",
|
||||
"version": "2.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "21dc724a0583619cd1652f673303492272778051"
|
||||
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
|
||||
"reference": "21dc724a0583619cd1652f673303492272778051",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884",
|
||||
"reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1460,6 +1460,7 @@
|
|||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||
"http-interop/http-factory-tests": "0.9.0",
|
||||
"jshttp/mime-db": "1.54.0.1",
|
||||
"phpunit/phpunit": "^8.5.44 || ^9.6.25"
|
||||
},
|
||||
"suggest": {
|
||||
|
|
@ -1531,7 +1532,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.8.0"
|
||||
"source": "https://github.com/guzzle/psr7/tree/2.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -1547,7 +1548,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-23T21:21:41+00:00"
|
||||
"time": "2026-03-10T16:41:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/uri-template",
|
||||
|
|
@ -1831,16 +1832,16 @@
|
|||
},
|
||||
{
|
||||
"name": "laravel/fortify",
|
||||
"version": "v1.35.0",
|
||||
"version": "v1.36.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/fortify.git",
|
||||
"reference": "24c5bb81ea4787e0865c4a62f054ed7d1cb7a093"
|
||||
"reference": "cad8bfeb63f6818f173d40090725c565c92651d4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/fortify/zipball/24c5bb81ea4787e0865c4a62f054ed7d1cb7a093",
|
||||
"reference": "24c5bb81ea4787e0865c4a62f054ed7d1cb7a093",
|
||||
"url": "https://api.github.com/repos/laravel/fortify/zipball/cad8bfeb63f6818f173d40090725c565c92651d4",
|
||||
"reference": "cad8bfeb63f6818f173d40090725c565c92651d4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1890,20 +1891,20 @@
|
|||
"issues": "https://github.com/laravel/fortify/issues",
|
||||
"source": "https://github.com/laravel/fortify"
|
||||
},
|
||||
"time": "2026-02-24T14:00:44+00:00"
|
||||
"time": "2026-03-10T19:59:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v12.53.0",
|
||||
"version": "v12.54.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f"
|
||||
"reference": "325497463e7599cd14224c422c6e5dd2fe832868"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/f57f035c0d34503d9ff30be76159bb35a003cd1f",
|
||||
"reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/325497463e7599cd14224c422c6e5dd2fe832868",
|
||||
"reference": "325497463e7599cd14224c422c6e5dd2fe832868",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -1924,7 +1925,7 @@
|
|||
"guzzlehttp/uri-template": "^1.0",
|
||||
"laravel/prompts": "^0.3.0",
|
||||
"laravel/serializable-closure": "^1.3|^2.0",
|
||||
"league/commonmark": "^2.7",
|
||||
"league/commonmark": "^2.8.1",
|
||||
"league/flysystem": "^3.25.1",
|
||||
"league/flysystem-local": "^3.25.1",
|
||||
"league/uri": "^7.5.1",
|
||||
|
|
@ -2112,20 +2113,20 @@
|
|||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2026-02-24T14:35:15+00:00"
|
||||
"time": "2026-03-10T20:25:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/prompts",
|
||||
"version": "v0.3.13",
|
||||
"version": "v0.3.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/prompts.git",
|
||||
"reference": "ed8c466571b37e977532fb2fd3c272c784d7050d"
|
||||
"reference": "9f0e371244eedfe2ebeaa72c79c54bb5df6e0176"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/prompts/zipball/ed8c466571b37e977532fb2fd3c272c784d7050d",
|
||||
"reference": "ed8c466571b37e977532fb2fd3c272c784d7050d",
|
||||
"url": "https://api.github.com/repos/laravel/prompts/zipball/9f0e371244eedfe2ebeaa72c79c54bb5df6e0176",
|
||||
"reference": "9f0e371244eedfe2ebeaa72c79c54bb5df6e0176",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2169,9 +2170,9 @@
|
|||
"description": "Add beautiful and user-friendly forms to your command-line applications.",
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/prompts/issues",
|
||||
"source": "https://github.com/laravel/prompts/tree/v0.3.13"
|
||||
"source": "https://github.com/laravel/prompts/tree/v0.3.14"
|
||||
},
|
||||
"time": "2026-02-06T12:17:10+00:00"
|
||||
"time": "2026-03-01T09:02:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/sanctum",
|
||||
|
|
@ -2299,16 +2300,16 @@
|
|||
},
|
||||
{
|
||||
"name": "laravel/socialite",
|
||||
"version": "v5.24.3",
|
||||
"version": "v5.25.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/socialite.git",
|
||||
"reference": "0feb62267e7b8abc68593ca37639ad302728c129"
|
||||
"reference": "231f572e1a37c9ca1fb8085e9fb8608285beafb3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/0feb62267e7b8abc68593ca37639ad302728c129",
|
||||
"reference": "0feb62267e7b8abc68593ca37639ad302728c129",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/231f572e1a37c9ca1fb8085e9fb8608285beafb3",
|
||||
"reference": "231f572e1a37c9ca1fb8085e9fb8608285beafb3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -2367,7 +2368,7 @@
|
|||
"issues": "https://github.com/laravel/socialite/issues",
|
||||
"source": "https://github.com/laravel/socialite"
|
||||
},
|
||||
"time": "2026-02-21T13:32:50+00:00"
|
||||
"time": "2026-02-27T13:56:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/tinker",
|
||||
|
|
@ -3517,16 +3518,16 @@
|
|||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "3.11.1",
|
||||
"version": "3.11.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/CarbonPHP/carbon.git",
|
||||
"reference": "f438fcc98f92babee98381d399c65336f3a3827f"
|
||||
"reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/f438fcc98f92babee98381d399c65336f3a3827f",
|
||||
"reference": "f438fcc98f92babee98381d399c65336f3a3827f",
|
||||
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
|
||||
"reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -3618,7 +3619,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-29T09:26:29+00:00"
|
||||
"time": "2026-03-11T17:23:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nette/schema",
|
||||
|
|
@ -3925,32 +3926,32 @@
|
|||
},
|
||||
{
|
||||
"name": "om/icalparser",
|
||||
"version": "v3.2.1",
|
||||
"version": "v4.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/OzzyCzech/icalparser.git",
|
||||
"reference": "bc7a82b12455ae9b62ce8e7f2d0273e86c931ecc"
|
||||
"reference": "3e60e2edf0bdfed6c81b69dccf0b7f2852cd87a6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/OzzyCzech/icalparser/zipball/bc7a82b12455ae9b62ce8e7f2d0273e86c931ecc",
|
||||
"reference": "bc7a82b12455ae9b62ce8e7f2d0273e86c931ecc",
|
||||
"url": "https://api.github.com/repos/OzzyCzech/icalparser/zipball/3e60e2edf0bdfed6c81b69dccf0b7f2852cd87a6",
|
||||
"reference": "3e60e2edf0bdfed6c81b69dccf0b7f2852cd87a6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.1.0"
|
||||
"php": "^8.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"nette/tester": "^2.5.7"
|
||||
"nette/tester": "^2.6.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "for timezone tool"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/"
|
||||
]
|
||||
"psr-4": {
|
||||
"om\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
|
|
@ -3970,9 +3971,9 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/OzzyCzech/icalparser/issues",
|
||||
"source": "https://github.com/OzzyCzech/icalparser/tree/v3.2.1"
|
||||
"source": "https://github.com/OzzyCzech/icalparser/tree/v4.0.0"
|
||||
},
|
||||
"time": "2025-12-15T06:25:09+00:00"
|
||||
"time": "2026-01-29T16:45:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/constant_time_encoding",
|
||||
|
|
@ -8451,21 +8452,21 @@
|
|||
},
|
||||
{
|
||||
"name": "wnx/sidecar-browsershot",
|
||||
"version": "v2.8.0",
|
||||
"version": "v2.9.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/stefanzweifel/sidecar-browsershot.git",
|
||||
"reference": "1d2a20a6723b74c139f98f7a020fe5c0f57d05a5"
|
||||
"reference": "352083995009bec142ff0c7ae4b2883831be0685"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/stefanzweifel/sidecar-browsershot/zipball/1d2a20a6723b74c139f98f7a020fe5c0f57d05a5",
|
||||
"reference": "1d2a20a6723b74c139f98f7a020fe5c0f57d05a5",
|
||||
"url": "https://api.github.com/repos/stefanzweifel/sidecar-browsershot/zipball/352083995009bec142ff0c7ae4b2883831be0685",
|
||||
"reference": "352083995009bec142ff0c7ae4b2883831be0685",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"hammerstone/sidecar": "^0.7.1",
|
||||
"illuminate/contracts": "^12.0",
|
||||
"hammerstone/sidecar": "^0.7.1 | ^0.8.0",
|
||||
"illuminate/contracts": "^12.0 | ^13.0",
|
||||
"php": "^8.4",
|
||||
"spatie/browsershot": "^5.0",
|
||||
"spatie/laravel-package-tools": "^1.9.2"
|
||||
|
|
@ -8475,7 +8476,7 @@
|
|||
"laravel/pint": "^1.13",
|
||||
"league/flysystem-aws-s3-v3": "^1.0|^2.0|^3.0",
|
||||
"nunomaduro/collision": "^7.0|^8.0",
|
||||
"orchestra/testbench": "^10.0",
|
||||
"orchestra/testbench": "^10.0 | ^11.0",
|
||||
"pestphp/pest": "^3.0|^4.0",
|
||||
"pestphp/pest-plugin-laravel": "^3.0|^4.0",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
|
|
@ -8525,7 +8526,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/stefanzweifel/sidecar-browsershot/issues",
|
||||
"source": "https://github.com/stefanzweifel/sidecar-browsershot/tree/v2.8.0"
|
||||
"source": "https://github.com/stefanzweifel/sidecar-browsershot/tree/v2.9.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -8533,7 +8534,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-03-07T18:24:28+00:00"
|
||||
"time": "2026-03-13T20:12:58+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
|
|
@ -9069,16 +9070,16 @@
|
|||
},
|
||||
{
|
||||
"name": "laravel/boost",
|
||||
"version": "v2.2.3",
|
||||
"version": "v2.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/boost.git",
|
||||
"reference": "44ab65a5455c2d6fceb71d6145f8d5d89c02d889"
|
||||
"reference": "ba0a9e6497398b6ce8243f5517b67d6761509150"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/boost/zipball/44ab65a5455c2d6fceb71d6145f8d5d89c02d889",
|
||||
"reference": "44ab65a5455c2d6fceb71d6145f8d5d89c02d889",
|
||||
"url": "https://api.github.com/repos/laravel/boost/zipball/ba0a9e6497398b6ce8243f5517b67d6761509150",
|
||||
"reference": "ba0a9e6497398b6ce8243f5517b67d6761509150",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -9131,20 +9132,20 @@
|
|||
"issues": "https://github.com/laravel/boost/issues",
|
||||
"source": "https://github.com/laravel/boost"
|
||||
},
|
||||
"time": "2026-03-06T20:20:28+00:00"
|
||||
"time": "2026-03-12T09:06:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/mcp",
|
||||
"version": "v0.6.0",
|
||||
"version": "v0.6.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/mcp.git",
|
||||
"reference": "28860a10ca0cc5433e25d897ba7af844e6c7b6a2"
|
||||
"reference": "f696e44735b95ff275392eab8ce5a3b4b42a2223"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/mcp/zipball/28860a10ca0cc5433e25d897ba7af844e6c7b6a2",
|
||||
"reference": "28860a10ca0cc5433e25d897ba7af844e6c7b6a2",
|
||||
"url": "https://api.github.com/repos/laravel/mcp/zipball/f696e44735b95ff275392eab8ce5a3b4b42a2223",
|
||||
"reference": "f696e44735b95ff275392eab8ce5a3b4b42a2223",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -9204,7 +9205,7 @@
|
|||
"issues": "https://github.com/laravel/mcp/issues",
|
||||
"source": "https://github.com/laravel/mcp"
|
||||
},
|
||||
"time": "2026-02-24T08:43:06+00:00"
|
||||
"time": "2026-03-10T20:00:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/pail",
|
||||
|
|
@ -9288,16 +9289,16 @@
|
|||
},
|
||||
{
|
||||
"name": "laravel/pint",
|
||||
"version": "v1.27.1",
|
||||
"version": "v1.29.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/pint.git",
|
||||
"reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5"
|
||||
"reference": "bdec963f53172c5e36330f3a400604c69bf02d39"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/pint/zipball/54cca2de13790570c7b6f0f94f37896bee4abcb5",
|
||||
"reference": "54cca2de13790570c7b6f0f94f37896bee4abcb5",
|
||||
"url": "https://api.github.com/repos/laravel/pint/zipball/bdec963f53172c5e36330f3a400604c69bf02d39",
|
||||
"reference": "bdec963f53172c5e36330f3a400604c69bf02d39",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -9308,13 +9309,14 @@
|
|||
"php": "^8.2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.93.1",
|
||||
"illuminate/view": "^12.51.0",
|
||||
"larastan/larastan": "^3.9.2",
|
||||
"friendsofphp/php-cs-fixer": "^3.94.2",
|
||||
"illuminate/view": "^12.54.1",
|
||||
"larastan/larastan": "^3.9.3",
|
||||
"laravel-zero/framework": "^12.0.5",
|
||||
"mockery/mockery": "^1.6.12",
|
||||
"nunomaduro/termwind": "^2.3.3",
|
||||
"pestphp/pest": "^3.8.5"
|
||||
"nunomaduro/termwind": "^2.4.0",
|
||||
"pestphp/pest": "^3.8.6",
|
||||
"shipfastlabs/agent-detector": "^1.1.0"
|
||||
},
|
||||
"bin": [
|
||||
"builds/pint"
|
||||
|
|
@ -9351,7 +9353,7 @@
|
|||
"issues": "https://github.com/laravel/pint/issues",
|
||||
"source": "https://github.com/laravel/pint"
|
||||
},
|
||||
"time": "2026-02-10T20:00:20+00:00"
|
||||
"time": "2026-03-12T15:51:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/roster",
|
||||
|
|
@ -9718,21 +9720,21 @@
|
|||
},
|
||||
{
|
||||
"name": "pestphp/pest",
|
||||
"version": "v4.4.1",
|
||||
"version": "v4.4.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pestphp/pest.git",
|
||||
"reference": "f96a1b27864b585b0b29b0ee7331176726f7e54a"
|
||||
"reference": "5d42e8fe3ae1d9fdf7c9f73ee88138fd30265701"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pestphp/pest/zipball/f96a1b27864b585b0b29b0ee7331176726f7e54a",
|
||||
"reference": "f96a1b27864b585b0b29b0ee7331176726f7e54a",
|
||||
"url": "https://api.github.com/repos/pestphp/pest/zipball/5d42e8fe3ae1d9fdf7c9f73ee88138fd30265701",
|
||||
"reference": "5d42e8fe3ae1d9fdf7c9f73ee88138fd30265701",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"brianium/paratest": "^7.19.0",
|
||||
"nunomaduro/collision": "^8.9.0",
|
||||
"nunomaduro/collision": "^8.9.1",
|
||||
"nunomaduro/termwind": "^2.4.0",
|
||||
"pestphp/pest-plugin": "^4.0.0",
|
||||
"pestphp/pest-plugin-arch": "^4.0.0",
|
||||
|
|
@ -9752,7 +9754,7 @@
|
|||
"pestphp/pest-dev-tools": "^4.1.0",
|
||||
"pestphp/pest-plugin-browser": "^4.3.0",
|
||||
"pestphp/pest-plugin-type-coverage": "^4.0.3",
|
||||
"psy/psysh": "^0.12.20"
|
||||
"psy/psysh": "^0.12.21"
|
||||
},
|
||||
"bin": [
|
||||
"bin/pest"
|
||||
|
|
@ -9818,7 +9820,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/pestphp/pest/issues",
|
||||
"source": "https://github.com/pestphp/pest/tree/v4.4.1"
|
||||
"source": "https://github.com/pestphp/pest/tree/v4.4.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
|
@ -9830,7 +9832,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-02-17T15:27:18+00:00"
|
||||
"time": "2026-03-10T21:09:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pestphp/pest-plugin",
|
||||
|
|
@ -12121,7 +12123,7 @@
|
|||
"prefer-stable": true,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
"php": "^8.2",
|
||||
"php": "^8.4",
|
||||
"ext-imagick": "*",
|
||||
"ext-simplexml": "*",
|
||||
"ext-zip": "*"
|
||||
|
|
|
|||
163
tests/Feature/Plugins/Ical/IcalParserTest.php
Normal file
163
tests/Feature/Plugins/Ical/IcalParserTest.php
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Models\Plugin;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
test('iCal plugin parses Google Calendar invitation event', function (): void {
|
||||
// Set test time close to the event in the issue
|
||||
Carbon::setTestNow(Carbon::parse('2026-03-10 12:00:00', 'Europe/Budapest'));
|
||||
|
||||
$icalContent = <<<'ICS'
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Example Corp.//EN
|
||||
BEGIN:VEVENT
|
||||
DTSTART;TZID=Europe/Budapest:20260311T100000
|
||||
DTEND;TZID=Europe/Budapest:20260311T110000
|
||||
DTSTAMP:20260301T100000Z
|
||||
ORGANIZER:mailto:organizer@example.com
|
||||
UID:xxxxxxxxxxxxxxxxxxx@google.com
|
||||
SEQUENCE:0
|
||||
DESCRIPTION:-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
|
||||
·:~:~:~:~:~:~:~:~::~:~::-
|
||||
Csatlakozás a Google Meet szolgáltatással: https://meet.google.com/xxx-xxxx-xxx
|
||||
|
||||
További információ a Meetről: https://support.google.com/a/users/answer/9282720
|
||||
|
||||
Kérjük, ne szerkeszd ezt a szakaszt.
|
||||
-::~:~::~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~
|
||||
·:~:~:~:~:~:~:~:~:~:~:~:~::~:~::-
|
||||
LOCATION:Meet XY Street, ZIP; https://meet.google.com/xxx-xxxx-xxx
|
||||
SUMMARY:Meeting
|
||||
STATUS:CONFIRMED
|
||||
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;X-NUM-GUESTS=0;X-PM-TOKEN=REDACTED;PARTSTAT=ACCEPTED:mailto:participant1@example.com
|
||||
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=participant2@example.com;X-NUM-GUESTS=0;X-PM-TOKEN=REDACTED;PARTSTAT=ACCEPTED:mailto:participant2@example.com
|
||||
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=participant3@example.com;X-NUM-GUESTS=0;X-PM-TOKEN=REDACTED;PARTSTAT=NEEDS-ACTION:mailto:participant3@example.com
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
ICS;
|
||||
|
||||
Http::fake([
|
||||
'example.com/calendar.ics' => Http::response($icalContent, 200, ['Content-Type' => 'text/calendar']),
|
||||
]);
|
||||
|
||||
$plugin = Plugin::factory()->create([
|
||||
'data_strategy' => 'polling',
|
||||
'polling_url' => 'https://example.com/calendar.ics',
|
||||
'polling_verb' => 'get',
|
||||
]);
|
||||
|
||||
$plugin->updateDataPayload();
|
||||
$plugin->refresh();
|
||||
|
||||
expect($plugin->data_payload)->not->toHaveKey('error');
|
||||
expect($plugin->data_payload)->toHaveKey('ical');
|
||||
expect($plugin->data_payload['ical'])->toHaveCount(1);
|
||||
expect($plugin->data_payload['ical'][0]['SUMMARY'])->toBe('Meeting');
|
||||
|
||||
Carbon::setTestNow();
|
||||
});
|
||||
|
||||
test('iCal plugin parses recurring events with multiple BYDAY correctly', function (): void {
|
||||
// Set test now to Monday 2024-03-25
|
||||
Carbon::setTestNow(Carbon::parse('2024-03-25 12:00:00', 'UTC'));
|
||||
|
||||
$icalContent = <<<'ICS'
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
PRODID:-//Example Corp.//EN
|
||||
BEGIN:VEVENT
|
||||
DESCRIPTION:XXX-REDACTED
|
||||
RRULE:FREQ=WEEKLY;UNTIL=20250604T220000Z;INTERVAL=1;BYDAY=TU,TH;WKST=MO
|
||||
UID:040000008200E00074C5B7101A82E00800000000E07AF34F937EDA01000000000000000
|
||||
01000000061F3E918C753424E8154B36E55452933
|
||||
SUMMARY:Recurring Meeting
|
||||
DTSTART;VALUE=DATE:20240326
|
||||
DTEND;VALUE=DATE:20240327
|
||||
DTSTAMP:20240605T082436Z
|
||||
CLASS:PUBLIC
|
||||
STATUS:CONFIRMED
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
ICS;
|
||||
|
||||
Http::fake([
|
||||
'example.com/recurring.ics' => Http::response($icalContent, 200, ['Content-Type' => 'text/calendar']),
|
||||
]);
|
||||
|
||||
$plugin = Plugin::factory()->create([
|
||||
'data_strategy' => 'polling',
|
||||
'polling_url' => 'https://example.com/recurring.ics',
|
||||
'polling_verb' => 'get',
|
||||
]);
|
||||
|
||||
$plugin->updateDataPayload();
|
||||
$plugin->refresh();
|
||||
|
||||
$ical = $plugin->data_payload['ical'];
|
||||
|
||||
// Week of March 25, 2024:
|
||||
// Tue March 26: 2024-03-26 (DTSTART)
|
||||
// Thu March 28: 2024-03-28 (Recurrence)
|
||||
|
||||
// The parser window is now-7 days to now+30 days.
|
||||
// Window: 2024-03-18 to 2024-04-24.
|
||||
|
||||
$summaries = collect($ical)->pluck('SUMMARY');
|
||||
expect($summaries)->toContain('Recurring Meeting');
|
||||
|
||||
$dates = collect($ical)->map(fn ($event) => Carbon::parse($event['DTSTART'])->format('Y-m-d'))->values();
|
||||
|
||||
// Check if Tuesday March 26 is present
|
||||
expect($dates)->toContain('2024-03-26');
|
||||
|
||||
// Check if Thursday March 28 is present (THIS IS WHERE IT IS EXPECTED TO FAIL BASED ON THE ISSUE)
|
||||
expect($dates)->toContain('2024-03-28');
|
||||
|
||||
Carbon::setTestNow();
|
||||
});
|
||||
|
||||
test('iCal plugin parses recurring events with multiple BYDAY and specific DTSTART correctly', function (): void {
|
||||
// Set test now to Monday 2024-03-25
|
||||
Carbon::setTestNow(Carbon::parse('2024-03-25 12:00:00', 'UTC'));
|
||||
|
||||
$icalContent = <<<'ICS'
|
||||
BEGIN:VCALENDAR
|
||||
VERSION:2.0
|
||||
X-WR-TIMEZONE:UTC
|
||||
PRODID:-//Example Corp.//EN
|
||||
BEGIN:VEVENT
|
||||
RRULE:FREQ=WEEKLY;UNTIL=20250604T220000Z;INTERVAL=1;BYDAY=TU,TH;WKST=MO
|
||||
UID:recurring-event-2
|
||||
SUMMARY:Recurring Meeting 2
|
||||
DTSTART:20240326T100000
|
||||
DTEND:20240326T110000
|
||||
DTSTAMP:20240605T082436Z
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
ICS;
|
||||
|
||||
Http::fake([
|
||||
'example.com/recurring2.ics' => Http::response($icalContent, 200, ['Content-Type' => 'text/calendar']),
|
||||
]);
|
||||
|
||||
$plugin = Plugin::factory()->create([
|
||||
'data_strategy' => 'polling',
|
||||
'polling_url' => 'https://example.com/recurring2.ics',
|
||||
'polling_verb' => 'get',
|
||||
]);
|
||||
|
||||
$plugin->updateDataPayload();
|
||||
$plugin->refresh();
|
||||
|
||||
$ical = $plugin->data_payload['ical'];
|
||||
$dates = collect($ical)->map(fn ($event) => Carbon::parse($event['DTSTART'])->format('Y-m-d'))->values();
|
||||
|
||||
expect($dates)->toContain('2024-03-26');
|
||||
expect($dates)->toContain('2024-03-28');
|
||||
|
||||
Carbon::setTestNow();
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue