diff --git a/.devtools/create_release_package.bat b/.devtools/create_release_package.bat index 412c5f4b..6313ec93 100644 --- a/.devtools/create_release_package.bat +++ b/.devtools/create_release_package.bat @@ -13,6 +13,6 @@ del "%releasePath%\grocy_%version%.zip" 7za a -r "%releasePath%\grocy_%version%.zip" "%projectPath%\*" -xr!.* -xr!build.bat -xr!composer.json -xr!composer.lock -xr!package.json -xr!yarn.lock -xr!docs 7za a "%releasePath%\grocy_%version%.zip" "%projectPath%\public\.htaccess" 7za rn "%releasePath%\grocy_%version%.zip" .htaccess public\.htaccess -7za d "%releasePath%\grocy_%version%.zip" data\*.* data\storage data\viewcache\* +7za d "%releasePath%\grocy_%version%.zip" data\*.* data\storage data\viewcache\* changelog\__TEMPLATE.md 7za a "%releasePath%\grocy_%version%.zip" "%projectPath%\data\.htaccess" 7za rn "%releasePath%\grocy_%version%.zip" .htaccess data\.htaccess diff --git a/README.md b/README.md index 44ffcd20..87f075d7 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ The following shorthands are available: - Example: `20210417` will be converted to `2021-04-17` - `YYYYMMe` or `YYYYMM+` gets expanded to the end of the given month in the given year in proper notation - Example: `202107e` will be converted to `2021-07-31` -- `[+/-]n[d/m/y]` gets expanded to a date relative to today, while adding `+` or subtracting `-` the number of days/months/years, in proper notation +- `[+/-]n[d/m/y]` gets expanded to a date relative to today, while adding (**+**) or subtracting (**-**) the **n**umber of**d**ays/**m**onths/**y**ears, in proper notation - Example: `+1m` will be converted to the same day next month - `x` gets expanded to `2999-12-31` (which is an alias for "never overdue") - Down/up arrow keys will increase/decrease the date by 1 day diff --git a/changelog/66_UNRELEASED_xxxx-xx-xx.md b/changelog/66_UNRELEASED_xxxx-xx-xx.md index 8039ae9f..87d53737 100644 --- a/changelog/66_UNRELEASED_xxxx-xx-xx.md +++ b/changelog/66_UNRELEASED_xxxx-xx-xx.md @@ -1,27 +1,83 @@ +> ⚠️ xxxBREAKING CHANGESxxx + +> ❗ xxxImportant upgrade informationXXX + +### New feature: xxxx + +- xxx + +### Stock + - Stock entry labels get now also printed on inventory (only when adding products, same option "Stock entry label" like on the purchase page) -- Added a separate status filter and table row highlighting (blue) on the chores, tasks and batteries overview pages for items due today - - Additionally, the "due soon" days of chores/tasks/batteries (top right corner settings menu) can be set to `0` to disable that filter/highlighting -- The `config.php` option `FEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT` was removed and is now a new product option `Treat opened as out of stock`, means, if opened items will be counted as missing for calculating if a product is below its minimum stock amount, can now be configured per product +- The `config.php` option `FEATURE_SETTING_STOCK_COUNT_OPENED_PRODUCTS_AGAINST_MINIMUM_STOCK_AMOUNT` was removed and is now a new product option `Treat opened as out of stock`, means, if opened stock entries will be counted as missing for calculating if a product is below its minimum stock amount, can now be configured per product - The existing option will be migrated to all existing products, so no changed behavior after the update - There is also a new stock setting (section "Presets for new products") which can be used to configure the default when adding products (also that will be set based on the old setting on migration) - When using/scanning a stock entry grocycode on the consume page, the amount is now prefilled by the stock entry amount (making it essentially possible to consume the corresponding stock entry in one go) -- Optimized relative time display (also fixed a phrasing problem for some languages, e.g. Hungarian) (thanks @Tallyrald) -- When using LDAP authentication, the configured `LDAP_UID_ATTR` is now used to compare if the user already exists instead of the username entered on the login page (that prevents creating multiple users if you entere the username in different notations) (thanks @FloSet) -- When using reverse proxy authentication (`ReverseProxyAuthMiddleware`), it's now also possible to pass the username in an environment variable instead of an HTTP header (new `config.php` option `REVERSE_PROXY_AUTH_USE_ENV`) (thanks @Forceu) -- Performance improvements (page loading time) of the recipes page -- New input shorthand `[+/-]n[d/m/y]` for date fields to quickly input a date relative to today (adding `+` or subtracting `-` the number of days/months/years, see the full list of available shorthands [here](https://github.com/grocy/grocy#input-shorthands-for-date-fields)) -- Added a "Save & add another task"-button on the add task dialog to quickly create multiple tasks without having to close/reopen the dialog - Fixed that stock entry labels on purchase were printed, even when "No label" was selected (was only a problem when running label printer WebHooks server side) -- Fixed that when adding missing recipe ingredients, with the option "Only check if any amount is in stock" enabled, to the shopping list, unit conversions (if any) weren't considered -- Fixed that the recipe stock fulfillment information about shopping list amounts was not correct when the ingredient had a decimal amount -- Fixed that the meal plan showed the total calories per recipe (instead of per serving as stated by the suffix) -- Fixed that when having a quantity unit matching any application string, the translation of that string was used to display that unit - Fixed that formatted (HTML) text for the (hidden by default) product description column on the stock overview page was not correctly displayed - Fixed that numeric and date-time sorting of table columns on the stock entries page did not work correctly (thanks @MasterofJOKers) -- Fixed that the barcode lookup for the "Stock by-barcode" API endpoints was case sensitive -- Fixed that the logout button/menu was missing when using external authentication (e.g. LDAP) - Fixed that the consume page/dialog wasn't properly initialized when opening it from the stock entries page - Fixed that entries for not existing users were missing on the stock journal + +### Shopping list + +- xxx + +### Recipes + +- Performance improvements (page loading time) of the recipes page +- Fixed that when adding missing recipe ingredients, with the option "Only check if any amount is in stock" enabled, to the shopping list, unit conversions (if any) weren't considered +- Fixed that the recipe stock fulfillment information about shopping list amounts was not correct when the ingredient had a decimal amount + +### Meal plan + +- Meal plan sections can now (optionally) define a time, which will then be displayed on the meal plan section header and used for the corresponding calendar events + - Additionally the correspnding calendar event now also mentions the meal plan section name +- The day/week view can now be toggled + - New button on top right corner of the meal plan (only visible on bigger screens) + - On smaller screen the day view is still the default (no change) +- Fixed that the meal plan showed the total calories per recipe (instead of per serving as stated by the suffix) + +### Chores + +- Chore schedules can now be skipped + - New button on the chores overview and chore tracking page + - Skipped schedules will be highlighted accordingly on the chore journal + +### Calendar + - Fixed that when having a task without a due date, the iCal export was broken + +### Tasks + +- Added a "Save & add another task"-button on the add task dialog to quickly create multiple tasks without having to close/reopen the dialog - Fixed that when editing a task without a due date, `1970-01-01` was shown + +### Batteries + +- xxx + +### Equipment + +- xxx + +### Userfields + +- xxx + +### General + +- Added a separate status filter and table row highlighting (blue) on the chores, tasks and batteries overview pages for items due today + - Additionally, the "due soon" days of chores/tasks/batteries (top right corner settings menu) can be set to `0` to disable that filter/highlighting +- Optimized relative time display (also fixed a phrasing problem for some languages, e.g. Hungarian) (thanks @Tallyrald) +- When using LDAP authentication, the configured `LDAP_UID_ATTR` is now used to compare if the user already exists instead of the username entered on the login page (that prevents creating multiple users if you enter the username in different notations) (thanks @FloSet) +- When using reverse proxy authentication (`ReverseProxyAuthMiddleware`), it's now also possible to pass the username in an environment variable instead of an HTTP header (new `config.php` option `REVERSE_PROXY_AUTH_USE_ENV`) (thanks @Forceu) +- New input shorthand `[+/-]n[d/m/y]` for date fields to quickly input a date relative to today (adding (**+**) or subtracting (**-**) the **n**umber of **d**ays/**m**onths/**y**ears, see the full list of available shorthands [here](https://github.com/grocy/grocy#input-shorthands-for-date-fields)) +- Fixed that when having a quantity unit matching any application string, the translation of that string was used to display that unit +- Fixed that the logout button/menu was missing when using external authentication (e.g. LDAP) + +### API + - The API endpoint `/stock/shoppinglist/clear` has now a new optional request body parameter `done_only` (to only remove done items from the given shopping list, defaults to `false`) +- The API endpoint `/chores/{choreId}/execute` has now a new optional request body parameter `skipped` (to skip the next chore schedule) +- Fixed that the barcode lookup for the "Stock by-barcode" API endpoints was case sensitive diff --git a/changelog/__TEMPLATE.md b/changelog/__TEMPLATE.md new file mode 100644 index 00000000..522293dd --- /dev/null +++ b/changelog/__TEMPLATE.md @@ -0,0 +1,55 @@ +> ⚠️ xxxBREAKING CHANGESxxx + +> ❗ xxxImportant upgrade informationXXX + +### New feature: xxxx + +- xxx + +### Stock + +- xxx + +### Shopping list + +- xxx + +### Recipes + +- xxx + +### Meal plan + +- xxx + +### Chores + +- xxx + +### Calendar + +- xxx + +### Tasks + +- xxx + +### Batteries + +- xxx + +### Equipment + +- xxx + +### Userfields + +- xxx + +### General + +- xxx + +### API + +- xxx diff --git a/composer.lock b/composer.lock index 0b87eef3..417b43a1 100644 --- a/composer.lock +++ b/composer.lock @@ -216,22 +216,22 @@ }, { "name": "eluceo/ical", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/markuspoerschke/iCal.git", - "reference": "e23129e95a363c37c077a5930f06e67a9476585c" + "reference": "da99126d7325a375c9fef10c0ddf1bf446743232" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/markuspoerschke/iCal/zipball/e23129e95a363c37c077a5930f06e67a9476585c", - "reference": "e23129e95a363c37c077a5930f06e67a9476585c", + "url": "https://api.github.com/repos/markuspoerschke/iCal/zipball/da99126d7325a375c9fef10c0ddf1bf446743232", + "reference": "da99126d7325a375c9fef10c0ddf1bf446743232", "shasum": "" }, "require": { "ext-mbstring": "*", "php": ">=7.4 || ~8.0.0", - "symfony/deprecation-contracts": "^2.1" + "symfony/deprecation-contracts": "^2.1 || ^3.0" }, "conflict": { "php": "7.4.6" @@ -276,7 +276,7 @@ "issues": "https://github.com/markuspoerschke/iCal/issues", "source": "https://github.com/markuspoerschke/iCal" }, - "time": "2021-08-24T18:40:46+00:00" + "time": "2021-12-13T12:36:19+00:00" }, { "name": "erusev/parsedown", @@ -330,24 +330,21 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", "shasum": "" }, "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, "type": "library", "autoload": { "psr-0": { @@ -378,9 +375,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/master" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" }, - "time": "2020-06-29T00:56:53+00:00" + "time": "2021-12-25T01:21:49+00:00" }, { "name": "fig/http-message-util", @@ -595,29 +592,29 @@ }, { "name": "gumlet/php-image-resize", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/gumlet/php-image-resize.git", - "reference": "de6dc92d8ddf65e508b088202e5de6f3fb0621a2" + "reference": "5ef461c53241933a3e14e4582a9d2884b8261213" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gumlet/php-image-resize/zipball/de6dc92d8ddf65e508b088202e5de6f3fb0621a2", - "reference": "de6dc92d8ddf65e508b088202e5de6f3fb0621a2", + "url": "https://api.github.com/repos/gumlet/php-image-resize/zipball/5ef461c53241933a3e14e4582a9d2884b8261213", + "reference": "5ef461c53241933a3e14e4582a9d2884b8261213", "shasum": "" }, "require": { "ext-fileinfo": "*", "ext-gd": "*", - "php": ">=5.5.0" + "php": ">=5.6.0" }, "require-dev": { "apigen/apigen": "^4.1", "ext-exif": "*", "ext-gd": "*", "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^4.8" + "phpunit/phpunit": "^8.5" }, "suggest": { "ext-exif": "Auto-rotate jpeg files" @@ -648,22 +645,22 @@ ], "support": { "issues": "https://github.com/gumlet/php-image-resize/issues", - "source": "https://github.com/gumlet/php-image-resize/tree/2.0.0" + "source": "https://github.com/gumlet/php-image-resize/tree/2.0.1" }, - "time": "2020-07-04T21:04:16+00:00" + "time": "2021-12-18T17:10:48+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.0", + "version": "7.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", + "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", "shasum": "" }, "require": { @@ -672,7 +669,7 @@ "guzzlehttp/psr7": "^1.8.3 || ^2.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2" + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { "psr/http-client-implementation": "1.0" @@ -758,7 +755,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.0" + "source": "https://github.com/guzzle/guzzle/tree/7.4.1" }, "funding": [ { @@ -774,7 +771,7 @@ "type": "tidelift" } ], - "time": "2021-10-18T09:52:00+00:00" + "time": "2021-12-06T18:43:05+00:00" }, { "name": "guzzlehttp/promises", @@ -977,16 +974,16 @@ }, { "name": "illuminate/bus", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/bus.git", - "reference": "be400399687b97d5558a224e970060fd5d5f2735" + "reference": "917798f4a21c5eed1f83f9b434ce94f9c4fa8432" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/be400399687b97d5558a224e970060fd5d5f2735", - "reference": "be400399687b97d5558a224e970060fd5d5f2735", + "url": "https://api.github.com/repos/illuminate/bus/zipball/917798f4a21c5eed1f83f9b434ce94f9c4fa8432", + "reference": "917798f4a21c5eed1f83f9b434ce94f9c4fa8432", "shasum": "" }, "require": { @@ -1026,20 +1023,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-10-21T19:19:36+00:00" + "time": "2022-01-10T22:25:47+00:00" }, { "name": "illuminate/collections", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "05f286ec5fd2dd286e8384577047efc375c8954c" + "reference": "3933ab6b032167c0f7a598388e211c0810acf5d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/05f286ec5fd2dd286e8384577047efc375c8954c", - "reference": "05f286ec5fd2dd286e8384577047efc375c8954c", + "url": "https://api.github.com/repos/illuminate/collections/zipball/3933ab6b032167c0f7a598388e211c0810acf5d3", + "reference": "3933ab6b032167c0f7a598388e211c0810acf5d3", "shasum": "" }, "require": { @@ -1048,7 +1045,7 @@ "php": "^7.3|^8.0" }, "suggest": { - "symfony/var-dumper": "Required to use the dump method (^5.1.4)." + "symfony/var-dumper": "Required to use the dump method (^5.4)." }, "type": "library", "extra": { @@ -1057,12 +1054,12 @@ } }, "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - }, "files": [ "helpers.php" - ] + ], + "psr-4": { + "Illuminate\\Support\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1080,20 +1077,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-10-22T18:01:46+00:00" + "time": "2022-01-24T16:41:15+00:00" }, { "name": "illuminate/container", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "ef73feb5216ef97ab7023cf59c0c8dbbd5505a9d" + "reference": "e18f8ce24a551e086621b00c7b75d6914d2011b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/ef73feb5216ef97ab7023cf59c0c8dbbd5505a9d", - "reference": "ef73feb5216ef97ab7023cf59c0c8dbbd5505a9d", + "url": "https://api.github.com/repos/illuminate/container/zipball/e18f8ce24a551e086621b00c7b75d6914d2011b4", + "reference": "e18f8ce24a551e086621b00c7b75d6914d2011b4", "shasum": "" }, "require": { @@ -1131,20 +1128,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-09-15T14:32:50+00:00" + "time": "2022-01-05T15:38:15+00:00" }, { "name": "illuminate/contracts", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "e76f4bce73a2a1656add24bd5210ebc4b8af49c0" + "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/e76f4bce73a2a1656add24bd5210ebc4b8af49c0", - "reference": "e76f4bce73a2a1656add24bd5210ebc4b8af49c0", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", + "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", "shasum": "" }, "require": { @@ -1179,11 +1176,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-10-22T18:01:46+00:00" + "time": "2022-01-13T14:47:47+00:00" }, { "name": "illuminate/events", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/events.git", @@ -1211,12 +1208,12 @@ } }, "autoload": { - "psr-4": { - "Illuminate\\Events\\": "" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Illuminate\\Events\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1238,16 +1235,16 @@ }, { "name": "illuminate/filesystem", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", - "reference": "a7bc30dac4e27dbeb37b026f3dbaee13bd578861" + "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/a7bc30dac4e27dbeb37b026f3dbaee13bd578861", - "reference": "a7bc30dac4e27dbeb37b026f3dbaee13bd578861", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/73db3e9a233ed587ba54f52ab8580f3c7bc872b2", + "reference": "73db3e9a233ed587ba54f52ab8580f3c7bc872b2", "shasum": "" }, "require": { @@ -1256,7 +1253,7 @@ "illuminate/macroable": "^8.0", "illuminate/support": "^8.0", "php": "^7.3|^8.0", - "symfony/finder": "^5.1.4" + "symfony/finder": "^5.4" }, "suggest": { "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -1266,8 +1263,8 @@ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", - "symfony/mime": "Required to enable support for guessing extensions (^5.1.4)." + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", + "symfony/mime": "Required to enable support for guessing extensions (^5.4)." }, "type": "library", "extra": { @@ -1296,20 +1293,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-10-22T13:20:42+00:00" + "time": "2022-01-15T15:00:40+00:00" }, { "name": "illuminate/macroable", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", - "reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05" + "reference": "aed81891a6e046fdee72edd497f822190f61c162" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/300aa13c086f25116b5f3cde3ca54ff5c822fb05", - "reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162", + "reference": "aed81891a6e046fdee72edd497f822190f61c162", "shasum": "" }, "require": { @@ -1342,11 +1339,11 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2020-10-27T15:20:30+00:00" + "time": "2021-11-16T13:57:03+00:00" }, { "name": "illuminate/pipeline", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/pipeline.git", @@ -1394,16 +1391,16 @@ }, { "name": "illuminate/support", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "1ed88eed1d179e5a27171324e57692366449eca0" + "reference": "910c5eb5d506013fdf60f9dc68c5512711857558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/1ed88eed1d179e5a27171324e57692366449eca0", - "reference": "1ed88eed1d179e5a27171324e57692366449eca0", + "url": "https://api.github.com/repos/illuminate/support/zipball/910c5eb5d506013fdf60f9dc68c5512711857558", + "reference": "910c5eb5d506013fdf60f9dc68c5512711857558", "shasum": "" }, "require": { @@ -1415,7 +1412,7 @@ "illuminate/macroable": "^8.0", "nesbot/carbon": "^2.53.1", "php": "^7.3|^8.0", - "voku/portable-ascii": "^1.4.8" + "voku/portable-ascii": "^1.6.1" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -1424,9 +1421,9 @@ "illuminate/filesystem": "Required to use the composer class (^8.0).", "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).", "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).", - "symfony/process": "Required to use the composer class (^5.1.4).", - "symfony/var-dumper": "Required to use the dd function (^5.1.4).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.2)." + "symfony/process": "Required to use the composer class (^5.4).", + "symfony/var-dumper": "Required to use the dd function (^5.4).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, "type": "library", "extra": { @@ -1435,12 +1432,12 @@ } }, "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - }, "files": [ "helpers.php" - ] + ], + "psr-4": { + "Illuminate\\Support\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1458,20 +1455,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-11-09T17:40:38+00:00" + "time": "2022-01-28T16:29:10+00:00" }, { "name": "illuminate/view", - "version": "v8.70.2", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/illuminate/view.git", - "reference": "5e497ed2bf3452201a992bba7552306e49b17978" + "reference": "d1556d48872380623a03e99e3053903d7e3a2b33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/5e497ed2bf3452201a992bba7552306e49b17978", - "reference": "5e497ed2bf3452201a992bba7552306e49b17978", + "url": "https://api.github.com/repos/illuminate/view/zipball/d1556d48872380623a03e99e3053903d7e3a2b33", + "reference": "d1556d48872380623a03e99e3053903d7e3a2b33", "shasum": "" }, "require": { @@ -1512,7 +1509,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-11-06T15:10:53+00:00" + "time": "2022-01-15T17:24:59+00:00" }, { "name": "interficieis/php-barcode", @@ -1787,16 +1784,16 @@ }, { "name": "nesbot/carbon", - "version": "2.54.0", + "version": "2.56.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5" + "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/eed83939f1aed3eee517d03a33f5ec587ac529b5", - "reference": "eed83939f1aed3eee517d03a33f5ec587ac529b5", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/626ec8cbb724cd3c3400c3ed8f730545b744e3f4", + "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4", "shasum": "" }, "require": { @@ -1804,7 +1801,7 @@ "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.0", @@ -1813,7 +1810,7 @@ "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^0.12.54 || ^1.0", "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, @@ -1865,6 +1862,7 @@ "time" ], "support": { + "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", "source": "https://github.com/briannesbitt/Carbon" }, @@ -1878,7 +1876,7 @@ "type": "tidelift" } ], - "time": "2021-11-01T21:22:20+00:00" + "time": "2022-01-21T17:08:38+00:00" }, { "name": "nikic/fast-route", @@ -1902,12 +1900,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "FastRoute\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1932,16 +1930,16 @@ }, { "name": "opis/closure", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { @@ -1991,22 +1989,22 @@ ], "support": { "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "source": "https://github.com/opis/closure/tree/3.6.3" }, - "time": "2021-04-09T13:42:10+00:00" + "time": "2022-01-27T09:35:39+00:00" }, { "name": "php-di/invoker", - "version": "2.3.2", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "5214cbe5aad066022cd845dbf313f0e47aed928f" + "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/5214cbe5aad066022cd845dbf313f0e47aed928f", - "reference": "5214cbe5aad066022cd845dbf313f0e47aed928f", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/cd6d9f267d1a3474bdddf1be1da079f01b942786", + "reference": "cd6d9f267d1a3474bdddf1be1da079f01b942786", "shasum": "" }, "require": { @@ -2040,7 +2038,7 @@ ], "support": { "issues": "https://github.com/PHP-DI/Invoker/issues", - "source": "https://github.com/PHP-DI/Invoker/tree/2.3.2" + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.3" }, "funding": [ { @@ -2048,7 +2046,7 @@ "type": "github" } ], - "time": "2021-07-30T15:05:32+00:00" + "time": "2021-12-13T09:22:56+00:00" }, { "name": "php-di/php-di", @@ -3086,25 +3084,25 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -3133,7 +3131,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" }, "funding": [ { @@ -3149,24 +3147,25 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-11-01T23:48:49+00:00" }, { "name": "symfony/finder", - "version": "v5.3.7", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a10000ada1e600d109a6c7632e9ac42e8bf2fb93", - "reference": "a10000ada1e600d109a6c7632e9ac42e8bf2fb93", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-php80": "^1.16" }, "type": "library", @@ -3195,7 +3194,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.7" + "source": "https://github.com/symfony/finder/tree/v5.4.3" }, "funding": [ { @@ -3211,25 +3210,28 @@ "type": "tidelift" } ], - "time": "2021-08-04T21:20:46+00:00" + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + "reference": "30885182c981ab175d4d034db0f6f469898070ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, @@ -3274,7 +3276,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" }, "funding": [ { @@ -3290,25 +3292,28 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-10-20T20:35:02+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -3354,7 +3359,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" }, "funding": [ { @@ -3370,20 +3375,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -3400,12 +3405,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3437,7 +3442,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -3453,20 +3458,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -3483,12 +3488,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3516,7 +3521,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -3532,50 +3537,50 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/translation", - "version": "v5.3.10", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa" + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/6ef197aea2ac8b9cd63e0da7522b3771714035aa", - "reference": "6ef197aea2ac8b9cd63e0da7522b3771714035aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -3611,7 +3616,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.3.10" + "source": "https://github.com/symfony/translation/tree/v6.0.3" }, "funding": [ { @@ -3627,24 +3632,24 @@ "type": "tidelift" } ], - "time": "2021-10-10T06:43:24+00:00" + "time": "2022-01-07T00:29:03+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "suggest": { "symfony/translation-implementation": "" @@ -3652,7 +3657,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -3689,7 +3694,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" }, "funding": [ { @@ -3705,20 +3710,20 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-09-07T12:43:40+00:00" }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -3755,7 +3760,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { @@ -3779,7 +3784,7 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:55:24+00:00" } ], "packages-dev": [], @@ -3792,5 +3797,5 @@ "php": "^8.0" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.2.0" } diff --git a/controllers/ChoresApiController.php b/controllers/ChoresApiController.php index 17252c2c..eb9f51fc 100644 --- a/controllers/ChoresApiController.php +++ b/controllers/ChoresApiController.php @@ -73,6 +73,12 @@ class ChoresApiController extends BaseApiController $trackedTime = $requestBody['tracked_time']; } + $skipped = false; + if (array_key_exists('skipped', $requestBody) && filter_var($requestBody['skipped'], FILTER_VALIDATE_BOOLEAN) !== false) + { + $skipped = $requestBody['skipped']; + } + $doneBy = GROCY_USER_ID; if (array_key_exists('done_by', $requestBody) && !empty($requestBody['done_by'])) { @@ -84,7 +90,7 @@ class ChoresApiController extends BaseApiController User::checkPermission($request, User::PERMISSION_CHORE_TRACK_EXECUTION); } - $choreExecutionId = $this->getChoresService()->TrackChore($args['choreId'], $trackedTime, $doneBy); + $choreExecutionId = $this->getChoresService()->TrackChore($args['choreId'], $trackedTime, $doneBy, $skipped); return $this->ApiResponse($response, $this->getDatabase()->chores_log($choreExecutionId)); } catch (\Exception $ex) diff --git a/grocy.openapi.json b/grocy.openapi.json index 41837760..f084ce70 100644 --- a/grocy.openapi.json +++ b/grocy.openapi.json @@ -2003,7 +2003,7 @@ }, "allow_subproduct_substitution": { "type": "boolean", - "description": "`True` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" + "description": "`true` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" } }, "example": { @@ -2234,7 +2234,7 @@ }, "allow_subproduct_substitution": { "type": "boolean", - "description": "`True` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" + "description": "`true` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" } }, "example": { @@ -2532,7 +2532,7 @@ }, "allow_subproduct_substitution": { "type": "boolean", - "description": "`True` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" + "description": "`rue` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" } }, "example": { @@ -2755,7 +2755,7 @@ }, "allow_subproduct_substitution": { "type": "boolean", - "description": "`True` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" + "description": "`rue` when any in-stock sub product should be used when the given product is a parent product and currently not in-stock" } }, "example": { @@ -3616,6 +3616,11 @@ "done_by": { "type": "integer", "description": "A valid user id of who executed this chore, when omitted, the currently authenticated user will be used" + }, + "skipped": { + "type": "boolean", + "default": false, + "description": "`true` when the execution should be tracked as skipped, defaults to `false` when omitted" } } } @@ -4341,6 +4346,9 @@ "shopping_location_id": { "type": "integer" }, + "treat_opened_as_out_of_stock": { + "type": "integer" + }, "userfields": { "type": "object", "description": "Key/value pairs of userfields" diff --git a/localization/strings.pot b/localization/strings.pot index 5731ea56..8bafba45 100644 --- a/localization/strings.pot +++ b/localization/strings.pot @@ -2292,3 +2292,12 @@ msgstr "" msgid "When enabled, opened items will be counted as missing for calculating if this product is below its minimum stock amount" msgstr "" + +msgid "Skipped" +msgstr "" + +msgid "Skip next chore schedule" +msgstr "" + +msgid "Time" +msgstr "" diff --git a/migrations/0163.sql b/migrations/0163.sql new file mode 100644 index 00000000..0152b33c --- /dev/null +++ b/migrations/0163.sql @@ -0,0 +1,5 @@ +ALTER TABLE chores_log +ADD skipped TINYINT NOT NULL DEFAULT 0 CHECK(skipped IN (0, 1)); + +ALTER TABLE meal_plan_sections +ADD time_info TEXT; diff --git a/public/js/extensions.js b/public/js/extensions.js index f8c6a1b7..6375b668 100644 --- a/public/js/extensions.js +++ b/public/js/extensions.js @@ -205,5 +205,10 @@ function CleanFileName(fileName) function nl2br(s) { + if (s == null || s === undefined) + { + return ""; + } + return s.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, "$1
$2"); } diff --git a/public/js/grocy.js b/public/js/grocy.js index 4557f746..344679b4 100644 --- a/public/js/grocy.js +++ b/public/js/grocy.js @@ -393,6 +393,7 @@ Grocy.FrontendHelpers.ValidateForm = function(formId) if (form.checkValidity() === true) { $(form).find(':submit').removeClass('disabled'); + $(form).find('.keep-disabled').addClass('disabled'); } else { diff --git a/public/viewjs/batterytracking.js b/public/viewjs/batterytracking.js index ce7a220c..b7b64844 100644 --- a/public/viewjs/batterytracking.js +++ b/public/viewjs/batterytracking.js @@ -24,7 +24,6 @@ $('#battery_id_text_input').focus(); $('#battery_id_text_input').val(''); $('#tracked_time').find('input').val(moment().format('YYYY-MM-DD HH:mm:ss')); - $('#tracked_time').find('input').trigger('change'); $('#battery_id_text_input').trigger('change'); Grocy.FrontendHelpers.ValidateForm('batterytracking-form'); }, diff --git a/public/viewjs/choresoverview.js b/public/viewjs/choresoverview.js index b327edcf..a8ec4740 100644 --- a/public/viewjs/choresoverview.js +++ b/public/viewjs/choresoverview.js @@ -92,6 +92,7 @@ $(document).on('click', '.track-chore-button', function(e) var choreId = $(e.currentTarget).attr('data-chore-id'); var choreName = $(e.currentTarget).attr('data-chore-name'); + var skipped = $(e.currentTarget).hasClass("skip"); Grocy.Api.Get('objects/chores/' + choreId, function(chore) @@ -102,7 +103,7 @@ $(document).on('click', '.track-chore-button', function(e) trackedTime = moment().format('YYYY-MM-DD'); } - Grocy.Api.Post('chores/' + choreId + '/execute', { 'tracked_time': trackedTime }, + Grocy.Api.Post('chores/' + choreId + '/execute', { 'tracked_time': trackedTime, 'skipped': skipped }, function() { Grocy.Api.Get('chores/' + choreId, @@ -132,7 +133,7 @@ $(document).on('click', '.track-chore-button', function(e) $('#chore-' + choreId + '-last-tracked-time').text(trackedTime); $('#chore-' + choreId + '-last-tracked-time-timeago').attr('datetime', trackedTime); - if (result.chore.period_type == "dynamic-regular") + if (result.chore.period_type != "manually") { $('#chore-' + choreId + '-next-execution-time').text(result.next_estimated_execution_time); $('#chore-' + choreId + '-next-execution-time-timeago').attr('datetime', result.next_estimated_execution_time); diff --git a/public/viewjs/choretracking.js b/public/viewjs/choretracking.js index 5fd3bb71..15c5dd03 100644 --- a/public/viewjs/choretracking.js +++ b/public/viewjs/choretracking.js @@ -1,4 +1,4 @@ -$('#save-choretracking-button').on('click', function(e) +$('.save-choretracking-button').on('click', function(e) { e.preventDefault(); @@ -7,13 +7,15 @@ return; } + var skipped = $(e.currentTarget).hasClass("skip"); + var jsonForm = $('#choretracking-form').serializeJSON(); Grocy.FrontendHelpers.BeginUiBusy("choretracking-form"); Grocy.Api.Get('chores/' + jsonForm.chore_id, function(choreDetails) { - Grocy.Api.Post('chores/' + jsonForm.chore_id + '/execute', { 'tracked_time': Grocy.Components.DateTimePicker.GetValue(), 'done_by': $("#user_id").val() }, + Grocy.Api.Post('chores/' + jsonForm.chore_id + '/execute', { 'tracked_time': Grocy.Components.DateTimePicker.GetValue(), 'done_by': $("#user_id").val(), 'skipped': skipped }, function(result) { Grocy.EditObjectId = result.id; @@ -58,6 +60,7 @@ $('#chore_id').on('change', function(e) Grocy.Api.Get('objects/chores/' + choreId, function(chore) { + if (chore.track_date_only == 1) { Grocy.Components.DateTimePicker.ChangeFormat("YYYY-MM-DD"); @@ -68,6 +71,17 @@ $('#chore_id').on('change', function(e) Grocy.Components.DateTimePicker.ChangeFormat("YYYY-MM-DD HH:mm:ss"); Grocy.Components.DateTimePicker.SetValue(moment().format("YYYY-MM-DD HH:mm:ss")); } + + if (chore.period_type == "manually") + { + $(".save-choretracking-button.skip").addClass("keep-disabled"); + } + else + { + $(".save-choretracking-button.skip").removeClass("keep-disabled"); + } + + Grocy.FrontendHelpers.ValidateForm('choretracking-form'); }, function(xhr) { @@ -114,7 +128,7 @@ $('#choretracking-form input').keydown(function(event) } else { - $('#save-choretracking-button').click(); + $('.save-choretracking-button').first().click(); } } }); diff --git a/public/viewjs/components/datetimepicker.js b/public/viewjs/components/datetimepicker.js index 255c01a3..6c19b91d 100644 --- a/public/viewjs/components/datetimepicker.js +++ b/public/viewjs/components/datetimepicker.js @@ -20,8 +20,6 @@ Grocy.Components.DateTimePicker.SetValue = function(value, inputElement = Grocy. $("#datetimepicker-shortcut").click(); } inputElement.val(value); - inputElement.trigger('change'); - inputElement.keyup(); } diff --git a/public/viewjs/components/datetimepicker2.js b/public/viewjs/components/datetimepicker2.js index 15446f10..5543aaef 100644 --- a/public/viewjs/components/datetimepicker2.js +++ b/public/viewjs/components/datetimepicker2.js @@ -20,8 +20,6 @@ Grocy.Components.DateTimePicker2.SetValue = function(value, inputElement = Grocy $("#datetimepicker2-shortcut").click(); } inputElement.val(value); - inputElement.trigger('change'); - inputElement.keyup(); } diff --git a/public/viewjs/mealplan.js b/public/viewjs/mealplan.js index 91fcbadd..e482e215 100644 --- a/public/viewjs/mealplan.js +++ b/public/viewjs/mealplan.js @@ -19,11 +19,18 @@ $(".calendar").each(function() var isPrimarySection = BoolVal(container.attr("data-primary-section")); var isLastSection = BoolVal(container.attr("data-last-section")); + var rightButtonList = "agendaWeek,agendaDay,prev,today,next"; + if ($(window).width() < 768) + { + var rightButtonList = "prev,today,next"; + } + var headerConfig = { "left": "title", "center": "", - "right": "prev,today,next" + "right": rightButtonList }; + if (!isPrimarySection) { headerConfig = { @@ -39,7 +46,7 @@ $(".calendar").each(function() "weekNumbers": false, "eventLimit": false, "eventSources": fullcalendarEventSources, - "defaultView": ($(window).width() < 768) ? "agendaDay" : "agendaWeek", + "defaultView": ($(window).width() < 768 || GetUriParam("days") == "0") ? "agendaDay" : "agendaWeek", "allDayText": sectionName, "allDayHtml": sectionName, "minTime": "00:00:00", @@ -310,6 +317,15 @@ $(".calendar").each(function() { UpdateUriParam("start", view.start.format("YYYY-MM-DD")); + if (view.name == "agendaDay") + { + UpdateUriParam("days", "0"); + } + else + { + RemoveUriParam("days"); + } + if (firstRender) { firstRender = false diff --git a/services/ApplicationService.php b/services/ApplicationService.php index 4115a7bc..e3c8f687 100644 --- a/services/ApplicationService.php +++ b/services/ApplicationService.php @@ -14,6 +14,11 @@ class ApplicationService extends BaseService $fileName = basename($file); $fileNameParts = explode('_', $fileName); + if ($fileName == '__TEMPLATE.md') + { + continue; + } + $fileContent = file_get_contents($file); $version = $fileNameParts[1]; $releaseDate = explode('.', $fileNameParts[2])[0]; diff --git a/services/CalendarService.php b/services/CalendarService.php index c8aad8ef..802fcb3a 100644 --- a/services/CalendarService.php +++ b/services/CalendarService.php @@ -100,48 +100,75 @@ class CalendarService extends BaseService $mealPlanProductEvents = []; if (GROCY_FEATURE_FLAG_RECIPES) { - $recipes = $this->getDatabase()->recipes(); - $mealPlanDayRecipes = $this->getDatabase()->recipes()->where('type', 'mealplan-day'); - $titlePrefix = $this->getLocalizationService()->__t('Meal plan recipe') . ': '; + $mealPlanSections = $this->getDatabase()->meal_plan_sections(); + $recipes = $this->getDatabase()->recipes()->where('type', 'normal'); + $mealPlanDayRecipes = $this->getDatabase()->meal_plan()->where('type', 'recipe'); + $titlePrefix = $this->getLocalizationService()->__t('Meal plan recipe') . ': '; foreach ($mealPlanDayRecipes as $mealPlanDayRecipe) { - $recipesOfCurrentDay = $this->getDatabase()->recipes_nestings_resolved()->where('recipe_id = :1 AND includes_recipe_id != :1', $mealPlanDayRecipe->id); - - foreach ($recipesOfCurrentDay as $recipeOfCurrentDay) + $start = $mealPlanDayRecipe->day; + $dateFormat = 'date'; + $section = FindObjectInArrayByPropertyValue($mealPlanSections, 'id', $mealPlanDayRecipe->section_id); + if (!empty($section->time_info)) { - $mealPlanRecipeEvents[] = [ - 'title' => $titlePrefix . FindObjectInArrayByPropertyValue($recipes, 'id', $recipeOfCurrentDay->includes_recipe_id)->name, - 'start' => FindObjectInArrayByPropertyValue($recipes, 'id', $recipeOfCurrentDay->recipe_id)->name, - 'date_format' => 'date', - 'description' => $this->UrlManager->ConstructUrl('/mealplan' . '?week=' . FindObjectInArrayByPropertyValue($recipes, 'id', $recipeOfCurrentDay->recipe_id)->name), - 'link' => $this->UrlManager->ConstructUrl('/recipes' . '?recipe=' . $recipeOfCurrentDay->includes_recipe_id . '#fullscreen') - ]; + $start = $mealPlanDayRecipe->day . ' ' . $section->time_info . ':00'; + $dateFormat = 'datetime'; } + + $titlePrefix2 = ''; + if (!empty($section->name)) + { + $titlePrefix2 = $section->name . ': '; + } + + $mealPlanRecipeEvents[] = [ + 'title' => $titlePrefix . $titlePrefix2 . FindObjectInArrayByPropertyValue($recipes, 'id', $mealPlanDayRecipe->recipe_id)->name, + 'start' => $start, + 'date_format' => $dateFormat, + 'description' => $this->UrlManager->ConstructUrl('/mealplan' . '?week=' . $mealPlanDayRecipe->day), + 'link' => $this->UrlManager->ConstructUrl('/recipes' . '?recipe=' . $mealPlanDayRecipe->recipe_id . '#fullscreen') + ]; } $mealPlanDayNotes = $this->getDatabase()->meal_plan()->where('type', 'note'); $titlePrefix = $this->getLocalizationService()->__t('Meal plan note') . ': '; - foreach ($mealPlanDayNotes as $mealPlanDayNote) { + $start = $mealPlanDayNote->day; + $dateFormat = 'date'; + $section = FindObjectInArrayByPropertyValue($mealPlanSections, 'id', $mealPlanDayNote->section_id); + if (!empty($section->time_info)) + { + $start = $mealPlanDayNote->day . ' ' . $section->time_info . ':00'; + $dateFormat = 'datetime'; + } + $mealPlanNotesEvents[] = [ 'title' => $titlePrefix . $mealPlanDayNote->note, - 'start' => $mealPlanDayNote->day, - 'date_format' => 'date' + 'start' => $start, + 'date_format' => $dateFormat ]; } $products = $this->getDatabase()->products(); $mealPlanDayProducts = $this->getDatabase()->meal_plan()->where('type', 'product'); $titlePrefix = $this->getLocalizationService()->__t('Meal plan product') . ': '; - foreach ($mealPlanDayProducts as $mealPlanDayProduct) { + $start = $mealPlanDayProduct->day; + $dateFormat = 'date'; + $section = FindObjectInArrayByPropertyValue($mealPlanSections, 'id', $mealPlanDayProduct->section_id); + if (!empty($section->time_info)) + { + $start = $mealPlanDayProduct->day . ' ' . $section->time_info . ':00'; + $dateFormat = 'datetime'; + } + $mealPlanProductEvents[] = [ 'title' => $titlePrefix . FindObjectInArrayByPropertyValue($products, 'id', $mealPlanDayProduct->product_id)->name, - 'start' => $mealPlanDayProduct->day, - 'date_format' => 'date' + 'start' => $start, + 'date_format' => $dateFormat ]; } } diff --git a/services/ChoresService.php b/services/ChoresService.php index 6f3651c6..3f01821f 100644 --- a/services/ChoresService.php +++ b/services/ChoresService.php @@ -110,8 +110,8 @@ class ChoresService extends BaseService $users = $this->getUsersService()->GetUsersAsDto(); $chore = $this->getDatabase()->chores($choreId); - $choreTrackedCount = $this->getDatabase()->chores_log()->where('chore_id = :1 AND undone = 0', $choreId)->count(); - $choreLastTrackedTime = $this->getDatabase()->chores_log()->where('chore_id = :1 AND undone = 0', $choreId)->max('tracked_time'); + $choreTrackedCount = $this->getDatabase()->chores_log()->where('chore_id = :1 AND undone = 0 AND skipped = 0', $choreId)->count(); + $choreLastTrackedTime = $this->getDatabase()->chores_log()->where('chore_id = :1 AND undone = 0 AND skipped = 0', $choreId)->max('tracked_time'); $nextExecutionTime = $this->getDatabase()->chores_current()->where('chore_id', $choreId)->min('next_estimated_execution_time'); $lastChoreLogRow = $this->getDatabase()->chores_log()->where('chore_id = :1 AND tracked_time = :2 AND undone = 0', $choreId, $choreLastTrackedTime)->fetch(); @@ -157,7 +157,7 @@ class ChoresService extends BaseService return $chores; } - public function TrackChore(int $choreId, string $trackedTime, $doneBy = GROCY_USER_ID) + public function TrackChore(int $choreId, string $trackedTime, $doneBy = GROCY_USER_ID, $skipped = false) { if (!$this->ChoreExists($choreId)) { @@ -176,10 +176,21 @@ class ChoresService extends BaseService $trackedTime = substr($trackedTime, 0, 10) . ' 00:00:00'; } + if ($skipped) + { + if ($chore->period_type == self::CHORE_PERIOD_TYPE_MANUALLY) + { + throw new \Exception('Chores without a schedule can\'t be skipped'); + } + + $trackedTime = $this->getDatabase()->chores_current()->where('chore_id', $choreId)->min('next_estimated_execution_time'); + } + $logRow = $this->getDatabase()->chores_log()->createRow([ 'chore_id' => $choreId, 'tracked_time' => $trackedTime, - 'done_by_user_id' => $doneBy + 'done_by_user_id' => $doneBy, + 'skipped' => BoolToInt($skipped) ]); $logRow->save(); $lastInsertId = $this->getDatabase()->lastInsertId(); diff --git a/views/choresjournal.blade.php b/views/choresjournal.blade.php index 23684b29..04bb1a29 100644 --- a/views/choresjournal.blade.php +++ b/views/choresjournal.blade.php @@ -102,7 +102,7 @@ @foreach($choresLog as $choreLogEntry) + class="@if($choreLogEntry->undone == 1) text-muted @endif @if($choreLogEntry->skipped == 1) font-italic @endif"> {{ $choreLogEntry->tracked_time }} + @if($choreLogEntry->skipped == 1) + {{ $__t('Skipped') }} + @endif @if(GROCY_FEATURE_FLAG_CHORES_ASSIGNMENTS) diff --git a/views/choresoverview.blade.php b/views/choresoverview.blade.php index 1c08fb5e..46d222a4 100644 --- a/views/choresoverview.blade.php +++ b/views/choresoverview.blade.php @@ -149,6 +149,15 @@ data-chore-name="{{ FindObjectInArrayByPropertyValue($chores, 'id', $curentChoreEntry->chore_id)->name }}"> + diff --git a/views/mealplan.blade.php b/views/mealplan.blade.php index 9fab027c..8853f146 100644 --- a/views/mealplan.blade.php +++ b/views/mealplan.blade.php @@ -36,12 +36,20 @@ .fc-axis div { transform: translateX(-50%) translateY(-50%) rotate(-90deg); font-weight: bold; - font-size: 1.8em; + font-size: 1.75em; letter-spacing: 0.1em; position: absolute; top: 50%; left: 0; - margin-left: 15px; + margin-left: 17px; + min-width: 100px; + line-height: 0.55; + text-align: center; + } + + .fc-axis .small { + font-size: 60%; + letter-spacing: normal; } .fc-content-skeleton { @@ -112,9 +120,11 @@
last doesn't work however, is always null... --}} + {{-- + $loop->last doesn't work however, is always null... + --}} data-last-section="{{ BoolToString(array_values(array_slice($usedMealplanSections->fetchAll(), -1))[0]->id == $mealplanSection->id) }}">
diff --git a/views/mealplansectionform.blade.php b/views/mealplansectionform.blade.php index 31493961..e63da1f2 100644 --- a/views/mealplansectionform.blade.php +++ b/views/mealplansectionform.blade.php @@ -53,6 +53,15 @@ 'hint' => $__t('Sections will be ordered by that number on the meal plan') )) +
+ + +
+ diff --git a/views/mealplansections.blade.php b/views/mealplansections.blade.php index e9e87cc0..693f99e4 100644 --- a/views/mealplansections.blade.php +++ b/views/mealplansections.blade.php @@ -75,6 +75,7 @@ {{ $__t('Name') }} {{ $__t('Sort number') }} + {{ $__t('Time') }} @@ -102,6 +103,9 @@ {{ $mealplanSection->sort_number }} + + {{ $mealplanSection->time_info }} + @endforeach diff --git a/yarn.lock b/yarn.lock index b0e6f09d..73d35cbc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,9 +29,9 @@ ndarray-linear-interpolate "^1.0.0" "@fontsource/noto-sans@^4.4.5": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-4.5.1.tgz#b0674a0b903adccb2cdafcc61b7a7f48805b826f" - integrity sha512-2Piw8UHz4XNomZgIUdurkv7cLcDOQvzZ8lagHF+Q7faYTukVCXZhdRLcVJ7qXMcsgYxg0wYYUYrF5sdnh6CzSQ== + version "4.5.3" + resolved "https://registry.yarnpkg.com/@fontsource/noto-sans/-/noto-sans-4.5.3.tgz#124c4475a885257b65fe4167af6615ab1bba477b" + integrity sha512-pBKuG/g7pMv1dCJ+x3piXqRfWuE/quPlPYaeGf3FwKUBGZyHl4LvM4bA8YmSlQzoMvH/MhcnvVHBhQ5x0fhseA== "@fortawesome/fontawesome-free@^5.14.0": version "5.15.4" @@ -238,12 +238,12 @@ datatables.net-bs4@1.10.16: datatables.net "1.10.16" jquery ">=1.7" -datatables.net-bs4@>=1.11.3, datatables.net-bs4@^1.10.15, datatables.net-bs4@^1.10.22: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net-bs4/-/datatables.net-bs4-1.11.3.tgz#04817c5d9457f1b9807a1330f12c37a541596328" - integrity sha512-UPT2F1nvZZzKJSSHb+3+bTeQy1ULLMT1BexBHCkh5PhMnAZNPbTEZD+6To1RCBfUF1rtPwIJTwJ+Jjjxy86xRw== +datatables.net-bs4@>=1.11.3, datatables.net-bs4@^1.10.22: + version "1.11.4" + resolved "https://registry.yarnpkg.com/datatables.net-bs4/-/datatables.net-bs4-1.11.4.tgz#caa82ab1a989bf1462f075b91213df865060d1ec" + integrity sha512-4V2uSxFloX1jRIsy4eAt1INyp5M5Pq5SV017/naq3zpVKraaFwqFjLhtkx64UHGXqcPj7egvj27dVcdnNIKnNA== dependencies: - datatables.net ">=1.10.25" + datatables.net ">=1.11.3" jquery ">=1.7" datatables.net-colreorder-bs4@^1.5.2: @@ -264,9 +264,9 @@ datatables.net-colreorder@>=1.5.4, datatables.net-colreorder@^1.5.2: jquery ">=1.7" datatables.net-plugins@^1.10.20: - version "1.10.24" - resolved "https://registry.yarnpkg.com/datatables.net-plugins/-/datatables.net-plugins-1.10.24.tgz#2b3cb4c30298da5762d1e1dd37640db6cd3b6c92" - integrity sha512-A0+q4BuPoiRkHXtn/D0bEUR+IiS+hpAp71CtB5BLZqG3R6UPp+OD306FwTZ/z6JUT7cIlf7BsM5fKxpOjhaGoA== + version "1.11.4" + resolved "https://registry.yarnpkg.com/datatables.net-plugins/-/datatables.net-plugins-1.11.4.tgz#8eb7915cd9f43ba8ba256b89e06917aa24d1ac41" + integrity sha512-39yyyoCCavagE0mO1BFsrRPeak5BwOlbtSACdGpPNf3jG5Lm7D6vEUPPcpGy6eLxjCiG/orMxlAqb8E5lSZtoA== datatables.net-rowgroup-bs4@^1.1.2: version "1.1.4" @@ -286,20 +286,20 @@ datatables.net-rowgroup@>=1.1.3, datatables.net-rowgroup@^1.1.2: jquery ">=1.7" datatables.net-select-bs4@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/datatables.net-select-bs4/-/datatables.net-select-bs4-1.3.3.tgz#daf0fa29ad6c438808b7d8d750abec6ade9805aa" - integrity sha512-jXYNXoDPXQOMvJtIOmy8kiVbiSVJvwQIWUu5dNRAGLWBsCjReukjI7lhaljRocKvfrYam2zw9Z16XDz8nzxTDQ== + version "1.3.4" + resolved "https://registry.yarnpkg.com/datatables.net-select-bs4/-/datatables.net-select-bs4-1.3.4.tgz#07336260be0aa7741a61b82188350f4d1e422a02" + integrity sha512-hXxxTwR9Mx8xwD55g8hNiLt035afguKZ9Ejsdm5/mo3wmm9ml7gs8QG5fJuMRwtrdP9EKcnjc54+zVoHymEcgw== dependencies: - datatables.net-bs4 "^1.10.15" - datatables.net-select "1.3.3" + datatables.net-bs4 ">=1.11.3" + datatables.net-select ">=1.3.3" jquery ">=1.7" -datatables.net-select@1.3.3, datatables.net-select@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/datatables.net-select/-/datatables.net-select-1.3.3.tgz#9259f70bf257e5d32198f38424d005808b78dc6d" - integrity sha512-M4e9Qx790IPt+tc+CLgk7gPram3i+M2OmhIkhIpp7RcZ2Ay4App4ouQZcEx3j1MTRIWxtOz47xjpWrwVfJ23YQ== +datatables.net-select@>=1.3.3, datatables.net-select@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/datatables.net-select/-/datatables.net-select-1.3.4.tgz#7970587a8d8db8ba70a4cccb89b8519bb518116d" + integrity sha512-iQ/dBHIWkhfCBxzNdtef79seCNO1ZsA5zU0Uiw3R2mlwmjcJM1xn6pFNajke6SX7VnlzndGDHGqzzEljSqz4pA== dependencies: - datatables.net "^1.10.15" + datatables.net ">=1.11.3" jquery ">=1.7" datatables.net@1.10.16: @@ -309,10 +309,10 @@ datatables.net@1.10.16: dependencies: jquery ">=1.7" -datatables.net@>=1.10.25, datatables.net@>=1.11.3, datatables.net@^1.10.15, datatables.net@^1.10.22: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.3.tgz#80e691036efcd62467558ee64c07dd566cb761b4" - integrity sha512-VMj5qEaTebpNurySkM6jy6sGpl+s6onPK8xJhYr296R/vUBnz1+id16NVqNf9z5aR076OGcpGHCuiTuy4E05oQ== +datatables.net@>=1.11.3, datatables.net@^1.10.22: + version "1.11.4" + resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.4.tgz#5f3e1ec134fa532e794fbd47c13f8333d7a5c455" + integrity sha512-z9LG4O0VYOYzp+rnArLExvnUWV8ikyWBcHYZEKDfVuz7BKxQdEq4a/tpO0Trbm+FL1+RY7UEIh+UcYNY/hwGxA== dependencies: jquery ">=1.7" @@ -513,10 +513,10 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stringify-safe@~5.0.1: version "5.0.1" @@ -524,13 +524,13 @@ json-stringify-safe@~5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" lodash@^4.17.21: @@ -641,9 +641,9 @@ punycode@^2.1.0, punycode@^2.1.1: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== regenerator-runtime@^0.13.4: version "0.13.9" @@ -692,9 +692,9 @@ sprintf-js@^1.0.3, sprintf-js@^1.1.2: integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0"