diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 6297bfcd..9624986b 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,7 +1,7 @@ --- name: Bug Report about: If you've found something that does not work, please report it to help improve - grocy + Grocy title: 'Bug: ' labels: bug assignees: '' diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 81f17da6..c096d288 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -1,4 +1,4 @@ -grocy is not an enterprise application and neither one you (should) host publicly (means without authentication) on the internet. +Grocy is not an enterprise application and neither one you (should) host publicly (means without authentication) on the internet. So unless something really bad can be abused _unauthenticated_, please just open a regular issue on the [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose). diff --git a/README.md b/README.md index fc0cea17..0a891ec0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@
-Logo +Logo

ERP beyond your fridge

-

grocy is a web-based self-hosted groceries & household management solution for your home
Created by @berrnd

+

Grocy is a web-based self-hosted groceries & household management solution for your home
Created by @berrnd

----- @@ -20,7 +20,7 @@ See the website → - General help and usage questions → [r/grocy subreddit](https://www.reddit.com/r/grocy) - Bug Reports and Feature Requests → [Issue Tracker](https://github.com/grocy/grocy/issues/new/choose) -_Please don't send me private messages or call me regarding grocy help. I check the issue tracker and the subreddit pretty much daily, but don't provide grocy support beyond that._ +_Please don't send me private messages or call me regarding Grocy help. I check the issue tracker and the subreddit pretty much daily, but don't provide any support beyond that._ ## Community contributions @@ -28,13 +28,13 @@ See the website for a list of community contributed Add-ons / Tools. → [htt ## How to install -> Checkout [grocy-desktop](https://github.com/grocy/grocy-desktop), if you want to run grocy without having to manage a webserver just like a normal (Windows) desktop application. +> Checkout [grocy-desktop](https://github.com/grocy/grocy-desktop), if you want to run Grocy without having to manage a webserver just like a normal (Windows) desktop application. > > Directly download the [latest release](https://releases.grocy.info/latest-desktop) - the installation is nothing more than just clicking 2 times "next". See the website for some installation guides and troubleshooting help. → [https://grocy.info/links](https://grocy.info/links) -grocy is technically a pretty simple PHP application, so the basic notes to get it running are: +Grocy is technically a pretty simple PHP application, so the basic notes to get it running are: - Unpack the [latest release](https://releases.grocy.info/latest) - Copy `config-dist.php` to `data/config.php` + edit to your needs - Ensure that the `data` directory is writable @@ -62,13 +62,13 @@ See [grocy/grocy-docker](https://github.com/grocy/grocy-docker) or [linuxserver/ - Empty the `data/viewcache` directory - Visit the main route once to apply database migrations ([see below](https://github.com/grocy/grocy#database-migrations)) -If you run grocy on Linux, there is also `update.sh` (remember to make the script executable (`chmod +x update.sh`) and ensure that you have `unzip` installed) which does exactly this and additionally creates a backup (`.tgz` archive) of the current installation in `data/backups` (backups older than 60 days will be deleted during the update). +If you run Grocy on Linux, there is also `update.sh` (remember to make the script executable (`chmod +x update.sh`) and ensure that you have `unzip` installed) which does exactly this and additionally creates a backup (`.tgz` archive) of the current installation in `data/backups` (backups older than 60 days will be deleted during the update). ## Localization -grocy is fully localizable - the default language is English (integrated into code), a German localization is always maintained by me. +Grocy is fully localizable - the default language is English (integrated into code), a German localization is always maintained by me. -You can easily help translating grocy on [Transifex](https://www.transifex.com/grocy/grocy/dashboard/) if your language is incomplete or not available yet. +You can easily help translating Grocy on [Transifex](https://www.transifex.com/grocy/grocy/dashboard/) if your language is incomplete or not available yet. The default language can be set in `data/config.php`, e. g. `Setting('DEFAULT_LOCALE', 'it');` and there is also a user setting (see the user settings page) to set a different language per user. @@ -92,7 +92,7 @@ See the integrated Swagger UI instance on [/api](https://demo.grocy.info/api). Some fields (with a barcode icon above) also allow to select a value by scanning a barcode. It works best when your barcode reader prefixes every barcode with a letter which is normally not part of a item name (I use a `$`) and sends a `TAB` after a scan. -Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding field (powered by [Quagga2](https://github.com/ericblade/quagga2), totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving grocy via a secure connection (`https://`)). Quick video demo: https://www.youtube.com/watch?v=Y5YH6IJFnfc +Additionally it's also possible to use your device camera to scan a barcode by using the camera button on the right side of the corresponding field (powered by [Quagga2](https://github.com/ericblade/quagga2), totally offline / client-side camera stream processing, please note due to browser security restrictions, this only works when serving Grocy via a secure connection (`https://`)). Quick video demo: _My personal recommendation: Use a USB barcode laser scanner. They are cheap and work 1000 % better, faster, under any lighting condition and from any angle._ @@ -133,7 +133,7 @@ _Please note: Database migrations are supposed to work between releases, not bet ### Disable certain features -If you don't use certain feature sets of grocy (for example if you don't need "Chores"), there are feature flags per major feature set to hide/disable the related UI elements (see `config-dist.php`). +If you don't use certain feature sets of Grocy (for example if you don't need "Chores"), there are feature flags per major feature set to hide/disable the related UI elements (see `config-dist.php`). ### Adding your own CSS or JS without to have to modify the application itself diff --git a/changelog/15_1.8.0_2018-04-16.md b/changelog/15_1.8.0_2018-04-16.md index 27fc90bd..1a27f0b2 100644 --- a/changelog/15_1.8.0_2018-04-16.md +++ b/changelog/15_1.8.0_2018-04-16.md @@ -1 +1 @@ -- grocy is now fully localizable and ships by default with English and German translations +- Grocy is now fully localizable and ships by default with English and German translations diff --git a/changelog/25_1.13.0_2018-07-12.md b/changelog/25_1.13.0_2018-07-12.md index 2ea78724..bf1d481a 100644 --- a/changelog/25_1.13.0_2018-07-12.md +++ b/changelog/25_1.13.0_2018-07-12.md @@ -1,3 +1,3 @@ -- Upgraded Bootstrap and some other dependencies (grocy now looks even better!) +- Upgraded Bootstrap and some other dependencies (Grocy now looks even better!) - Added Italian translation (thanks @davidoskky) - => Demo for this language available at: https://it.demo.grocy.info diff --git a/changelog/26_1.13.1_2018-07-12.md b/changelog/26_1.13.1_2018-07-12.md index c8b97ff2..e4567dfb 100644 --- a/changelog/26_1.13.1_2018-07-12.md +++ b/changelog/26_1.13.1_2018-07-12.md @@ -1,5 +1,5 @@ This was released shortly after the last release to fix a small regression bug, original changes from Version 1.13.0: -- Upgraded Bootstrap and some other dependencies (grocy now looks even better!) +- Upgraded Bootstrap and some other dependencies (Grocy now looks even better!) - Added Italian translation (thanks @davidoskky) - => Demo for this language available at: https://it.demo.grocy.info diff --git a/changelog/28_1.15.0_2018-07-22.md b/changelog/28_1.15.0_2018-07-22.md index a181ce59..ccab6232 100644 --- a/changelog/28_1.15.0_2018-07-22.md +++ b/changelog/28_1.15.0_2018-07-22.md @@ -1,7 +1,7 @@ - New related project: **grocy-desktop** - => https://github.com/grocy/grocy-desktop - - Run grocy without a webserver just like a normal (Windows) desktop application - - New "embedded mode" for grocy to help running in "desktop application mode" [see README](https://github.com/grocy/grocy#embedded-mode) + - Run Grocy without a webserver just like a normal (Windows) desktop application + - New "embedded mode" for Grocy to help running in "desktop application mode" [see README](https://github.com/grocy/grocy#embedded-mode) - New datepicker shorthands and improvements - `YYYYMMe` or `YYYYMM+` gets expanded to the end of the given month in the given year in proper notation - Changed: `MMDD` will be expanded to the given day next year if > today diff --git a/changelog/43_2.0.0_2019-03-06.md b/changelog/43_2.0.0_2019-03-06.md index 19289a4f..33471cb4 100644 --- a/changelog/43_2.0.0_2019-03-06.md +++ b/changelog/43_2.0.0_2019-03-06.md @@ -19,5 +19,5 @@ - Other improvements - The calendar can now be shared/integrated in iCal format (button in the header on the calendar page) - Added feature flags to hide/disable certain parts of grocy when you don't use them (for example hide "Chores" and all related UI elements, when you don't use it, see `config-dist.php`) - - Added a "Apple Touch Icon" and a "Web App Manifest" which should improve grocy on mobile devices and also enables "Add to Home screen" on major mobile browsers + - Added a "Apple Touch Icon" and a "Web App Manifest" which should improve Grocy on mobile devices and also enables "Add to Home screen" on major mobile browsers - A lot of other minor small and bigger UI improvements diff --git a/changelog/49_2.4.2_2019-06-09.md b/changelog/49_2.4.2_2019-06-09.md index 1e9699ef..c48ab482 100644 --- a/changelog/49_2.4.2_2019-06-09.md +++ b/changelog/49_2.4.2_2019-06-09.md @@ -2,7 +2,7 @@ - Fixed a problem that the user settings were not properly initialized for the frontend JS part when not logged only (so potentially affected only the login page) - Fixed an issue that the shopping list did not load when a plural translation for a quantity unit was missing - Fixed that tooltips were visible forever when consuming all products on the stock overview page -- Fixed that login did not work when "Stay logged in permanently" was set and grocy runs on a 32-bit system (thanks @matejdro) +- Fixed that login did not work when "Stay logged in permanently" was set and Grocy runs on a 32-bit system (thanks @matejdro) - Fixed page reloads when "Auto reload on external changes" is enabled and there is unsaved form data (the detection did not work for forms in modal dialogs, e. g. when adding a entry to the meal plan) - Fixed (again) that the product picker did not work properly when the product name contains single quotes - Fixed that a entered barcode on the product edit page was only saved when "adding" it to the barcodes list by pressing `TAB` (is now automatically added to the list also when just leaving the field) diff --git a/changelog/52_2.5.0_2019-09-22.md b/changelog/52_2.5.0_2019-09-22.md index a03f51bf..efc1fad2 100644 --- a/changelog/52_2.5.0_2019-09-22.md +++ b/changelog/52_2.5.0_2019-09-22.md @@ -1,12 +1,13 @@ ### New feature: Custom entities / objects / lists -- Custom entities are based on Userfields and can be used to add any custom lists you want to have in grocy + +- Custom entities are based on Userfields and can be used to add any custom lists you want to have in Grocy - They can have an own menu entry in the sidebar - => See "Manage master data" -> "Userentities" or try it on the demo: https://demo.grocy.info/userobjects/exampleuserentity ### New feature: Use the device camera for barcode scanning - Available on any barcode-enabled field (so currently only for picking products) - a new camera button at the right of side the text field - Implemented using [QuaggaJS](https://github.com/serratus/quaggaJS) - camera stream processing happens totally offline / client-side -- Please note due to browser security restrictions, this only works when serving grocy via a secure connection (`https://`) +- Please note due to browser security restrictions, this only works when serving Grocy via a secure connection (`https://`) - There is also a `config.php` setting `DISABLE_BROWSER_BARCODE_CAMERA_SCANNING` to disable this, if you don't need it at all (defaults to `false`) - I you have problems that barcodes are not recognized properly, there is a little "barcode scanner testing page" at [/barcodescannertesting](https://demo.grocy.info/barcodescannertesting) - => Quick video demo: https://www.youtube.com/watch?v=Y5YH6IJFnfc @@ -20,7 +21,7 @@ - Quantity units can now be linked (related measurements / unit conversion) - On the quantity unit edit page default conversion can be defined for each unit - Products "inherit" the default conversion and additionally can have their own / override the default ones -- It's now possible to print a "Location Content Sheet" with the current stock per location - new button at the top of the stock overview page (thought to hang it at the location, note used amounts on paper and track it in grocy later) +- It's now possible to print a "Location Content Sheet" with the current stock per location - new button at the top of the stock overview page (thought to hang it at the location, note used amounts on paper and track it in Grocy later) - Stock overview page improvements - Options in the more/context-menu to directly open the purchase/consume/inventory pages prefilled with the current product in a popup/dialog - Option in the more/context-menu to add the current product directly to a shopping list @@ -104,4 +105,4 @@ - It's now also possible to provide the API key via a query parameter (same name as the header, so `GROCY-API-KEY`) #### Say thanks -Because there were some questions about that in the past: If grocy is useful for you, [say thanks](https://grocy.info/#say-thanks)! +Because there were some questions about that in the past: If Grocy is useful for you, [say thanks](https://grocy.info/#say-thanks)! diff --git a/changelog/56_2.6.1_2020-03-06.md b/changelog/56_2.6.1_2020-03-06.md index 4c1ee602..62aea9ac 100644 --- a/changelog/56_2.6.1_2020-03-06.md +++ b/changelog/56_2.6.1_2020-03-06.md @@ -1,5 +1,5 @@ ## !! Important notice -If you run grocy in a subdirectory, you need to set a new `config.php` setting (`BASE_PATH`, see `config-dist.php`) +If you run Grocy in a subdirectory, you need to set a new `config.php` setting (`BASE_PATH`, see `config-dist.php`) ### Stock fixes - Fixed purchase/consume/inventory problems when `FEATURE_FLAG_STOCK_LOCATION_TRACKING` was set to `false` diff --git a/changelog/60_3.0.0_2020-12-22.md b/changelog/60_3.0.0_2020-12-22.md index 12701180..5294f856 100644 --- a/changelog/60_3.0.0_2020-12-22.md +++ b/changelog/60_3.0.0_2020-12-22.md @@ -31,10 +31,10 @@ - New `config.php` setting `AUTH_CLASS` to change the used authentication provider - Via LDAP - New `config.php` settings `LDAP_DOMAIN`, `LDAP_ADDRESS` and `LDAP_BASE_DN` - - If you set `AUTH_CLASS` to `Grocy\Middleware\LdapAuthMiddleware`, users will be authenticated against your directory (and will also be created (in grocy), if not already present) + - If you set `AUTH_CLASS` to `Grocy\Middleware\LdapAuthMiddleware`, users will be authenticated against your directory (and will also be created (in Grocy), if not already present) - Via a reverse proxy - New `config.php` setting `REVERSE_PROXY_AUTH_HEADER` - - If you set `AUTH_CLASS` to `Grocy\Middleware\ReverseProxyAuthMiddleware` and your reverse proxy sends a username in the HTTP header `REMOTE_USER` (header name can be changed by the setting `REVERSE_PROXY_AUTH_HEADER`), the user is automatically authenticated (and will also be created (in grocy), if not already present) + - If you set `AUTH_CLASS` to `Grocy\Middleware\ReverseProxyAuthMiddleware` and your reverse proxy sends a username in the HTTP header `REMOTE_USER` (header name can be changed by the setting `REVERSE_PROXY_AUTH_HEADER`), the user is automatically authenticated (and will also be created (in Grocy), if not already present) - (Thanks @fipwmaqzufheoxq92ebc for the initial work on this) ### Stock improvements/fixes @@ -174,7 +174,7 @@ - Products, quantity units and product groups are possible to use now - Means you can use for example the shopping list, recipes and the meal plan with products while the "stock handling part" is hidden - Ordering now happens case-insensitive -- The data path (previously fixed to the `data` folder) is now configurable, making it possible to run multiple grocy instances from the same directory (with different `config.php` files / different database, etc.) (thanks @fgrsnau) +- The data path (previously fixed to the `data` folder) is now configurable, making it possible to run multiple Grocy instances from the same directory (with different `config.php` files / different database, etc.) (thanks @fgrsnau) - Via an environment variable `GROCY_DATAPATH` (higher priority) - Via an FastCGI parameter `GROCY_DATAPATH` (lower priority) - The language can now be set per user (see the new user settings page / top right corner settings menu) (thanks @fipwmaqzufheoxq92ebc) diff --git a/changelog/62_3.1.0_2021-07-16.md b/changelog/62_3.1.0_2021-07-16.md index 0aab3cf2..0ac29c3d 100644 --- a/changelog/62_3.1.0_2021-07-16.md +++ b/changelog/62_3.1.0_2021-07-16.md @@ -2,7 +2,8 @@ > ⚠️ PHP 8.0 (with SQLite 3.27.2+) is from now on the only supported runtime version. -### New feature: grocycode / label printer support +### New feature: Grocycode / label printer support + #### (Own) Product/stock entry/chores/batteries labels/barcodes - Print own labels/barcodes for products/stock entries/chores/batteries and then scan that code on every place a product/stock entry/chore/battery can be selected - Can be printed (or downloaded) via @@ -27,7 +28,7 @@ ### New feature: Shopping list thermal printer support - The shopping list can now be printed on a thermal printer - - The printer must be compatible to the `ESC/POS` protocol and needs to be locally attached or network reachable to/by the machine hosting grocy (so the server) + - The printer must be compatible to the `ESC/POS` protocol and needs to be locally attached or network reachable to/by the machine hosting Grocy (so the server) - See the new `TPRINTER*` `config.php` options to configure the printer connection and other options - => New button on the shopping list print dialog - Can be enabled via the new feature flag `FEATURE_FLAG_THERMAL_PRINTER` (defaults to disabled) diff --git a/changelog/63_3.1.1_2021-08-21.md b/changelog/63_3.1.1_2021-08-21.md index 1a117948..ba41f08e 100644 --- a/changelog/63_3.1.1_2021-08-21.md +++ b/changelog/63_3.1.1_2021-08-21.md @@ -3,7 +3,7 @@ - More information on this: Only 1 level is currently supported; creating > 1 level nestings was _never_ possible via the UI/frontend, but not checked/enforced by the backend before `v3.0.0` - so it was potentially possible via the API (or any third party app/tool which utilizes it) to create such a nesting which then made this upgrade to fail - Fixed that it was not possible to select a chore/battery on the corresponding tracking pages by mouse/touch - Fixed that grouping by columns in tables may caused duplicate groups -- Fixed that grocycode camera barcode scanning didn't recognize the scanned code for chore/battery tracking +- Fixed that Grocycode camera barcode scanning didn't recognize the scanned code for chore/battery tracking - Fixed that when having any "Track date only" chore on the calendar, the iCal export was broken - Optimized the meal plan page to be properly printable (thanks @MrKrisKrisu) @@ -11,6 +11,6 @@ > ❗ The release before (v3.1.0) introduced that "numbers are now returned as numbers": **This was reverted** since it had unintended side effects (so all fields are technically strings now again, just like before - sorry for that) - Fixed that `missing_products` of the `/stock/volatile` endpoint also contained inactive products - Fixed that when having multiple Userfields for an entity, the `/objects/{entity}` endpoint returned wrong Userfield values -- Fixed that the `/stock/products/by-barcode/{barcode}/consume` and `/stock/products/by-barcode/{barcode}/transfer` endpoints haven't used the stock entry given by a stock entry grocycode (thanks @lowlee for the initial work on this) +- Fixed that the `/stock/products/by-barcode/{barcode}/consume` and `/stock/products/by-barcode/{barcode}/transfer` endpoints haven't used the stock entry given by a stock entry Grocycode (thanks @lowlee for the initial work on this) - Fixed that the "Stock by-barcode" API routes were broken for normal barcodes (only grocycodes were accepted) (thanks @larsverp) - Fixed that the "Stock by-barcode" API routes also accepted chore or battery grocycodes (thanks @lowlee) diff --git a/changelog/66_3.2.0_2022-02-11.md b/changelog/66_3.2.0_2022-02-11.md index ff7500f1..06100b7c 100644 --- a/changelog/66_3.2.0_2022-02-11.md +++ b/changelog/66_3.2.0_2022-02-11.md @@ -3,7 +3,7 @@ - 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) +- 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) - Stock entry labels get now also printed on inventory (only when adding products, same option "Stock entry label" like on the purchase page) - 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 formatted (HTML) text for the (hidden by default) product description column on the stock overview page was not correctly displayed @@ -17,7 +17,7 @@ - Background: Before v3.0.0 recipe costs were only based on the last price per product and since v3.0.0 the "real costs" (based on the default consume rule "Opened first, then first due first, then first in first out") are used, means out of stock items have no price - so using the last price for out of stock items should reflect the current real costs better - Added a new recipes setting (top right corner settings menu) "Show the recipe list and the recipe side by side" (defaults to enabled, so no changed behaviour when not configured) - When disabled, on the recipes page, the recipe list is displayed full-width and the recipe will be shown in a popup instead of on the right side -- Recipes are now also grocycode enabled (works like any other grocycode; download/print it via the recipes edit page or the more/context menu on the recipes page; use/scan it at any place a recipe can be selected) +- Recipes are now also Grocycode enabled (works like any other Grocycode; download/print it via the recipes edit page or the more/context menu on the recipes page; use/scan it at any place a recipe can be selected) - 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 diff --git a/changelog/67_3.3.0_2022-04-08.md b/changelog/67_3.3.0_2022-04-08.md index 4dad4b80..3366ce4c 100644 --- a/changelog/67_3.3.0_2022-04-08.md +++ b/changelog/67_3.3.0_2022-04-08.md @@ -42,7 +42,7 @@ - When enabled, the corresponding product can't have own stock, means it will not be selectable on purchase (useful for parent products which are just used as a summary/total view of the sub products) - The location content sheet can now optionally list also out of stock products (at the products default location, new checkbox "Show only in-stock products" at the top of the page, defaults to enabled) - Added a location filter to the stock entries page -- Added the product grocycode as a (hidden by default) column to the products list (master data) +- Added the product Grocycode as a (hidden by default) column to the products list (master data) - The price entered on the inventory page is now related to the selected quantity unit (like on the purchase page, was always related to the products stock QU before) - Fixed that consuming via the consume page was not possible when `FEATURE_FLAG_STOCK_LOCATION_TRACKING` was disabled @@ -89,7 +89,7 @@ ### Batteries - Fixed that the batteries overview page was broken when there was any battery Userfield with enabled "Show as column in tables" option -- Fixed that grocycode label printer printing didn't work from the battery edit page (master data) (thanks @andreheuer) +- Fixed that Grocycode label printer printing didn't work from the battery edit page (master data) (thanks @andreheuer) - Fixed that undoing a battery charge cycle had no effect on "Last charged" and "Next planned charge cycle" of the corresponding battery ### Equipment diff --git a/changelog/68_3.3.1_2022-06-10.md b/changelog/68_3.3.1_2022-06-10.md index 8415a739..2b75394d 100644 --- a/changelog/68_3.3.1_2022-06-10.md +++ b/changelog/68_3.3.1_2022-06-10.md @@ -29,5 +29,5 @@ - Endpoint `/stock/products/{productId}`: New field/property `default_consume_location` (contains the products default consume location object) - Endpoint `/stock/products/{productId}/add`: Fixed that the request body parameter `transaction_type` was ignored / always set to `purchase` -- Fixed that the endpoint `/stock/products/by-barcode/{barcode}/open` didn't handle stock entries provided by a grocycode (thanks @jtommi) +- Fixed that the endpoint `/stock/products/by-barcode/{barcode}/open` didn't handle stock entries provided by a Grocycode (thanks @jtommi) - Fixed that less or equal (`<=`) and greater or equal (`>=`) filter comparisons didn't work (optional `query[]` request query parameter on most endpoints) diff --git a/changelog/70_UNRELEASED_xxxx.xx.xx.md b/changelog/70_UNRELEASED_xxxx.xx.xx.md index 87f93a31..68b6c54c 100644 --- a/changelog/70_UNRELEASED_xxxx.xx.xx.md +++ b/changelog/70_UNRELEASED_xxxx.xx.xx.md @@ -94,6 +94,7 @@ - Like already possible for products/chores/batteries, locations, stores, quantity units, product groups and task categories can now be disabled to keep them for existing references without deleting them, but to hide them everywhere for selections and so on (new option "Active") - Added a new `config.php` setting `ENERGY_UNIT` to customize the label to display energy values (was fixed `kcal` before and defaults to that, so no changed behavior when not configured) +- New logo and "Grocy" is now officially spelled with a capital initial letter (before everything was lowercase) - Fixed that users were unable to delete their own API keys (when not having the `All permissions` permission) - Fixed that button tooltips on some places didn't disappear after clicking the corresponding button - New translations: (thanks all the translators) diff --git a/config-dist.php b/config-dist.php index 21c4a95a..c7258f24 100644 --- a/config-dist.php +++ b/config-dist.php @@ -36,7 +36,7 @@ Setting('CALENDAR_SHOW_WEEK_OF_YEAR', true); // Can also be set to -1 to dynamically start the meal plan week on "today" Setting('MEAL_PLAN_FIRST_DAY_OF_WEEK', ''); -// To keep it simple: grocy does not handle any currency conversions, +// To keep it simple: Grocy does not handle any currency conversions, // this here is used to format all money values, // so doesn't really matter, but needs to be the // ISO 4217 code of the currency ("USD", "EUR", "GBP", etc.) @@ -46,7 +46,7 @@ Setting('CURRENCY', 'USD'); // E.g. "kcal" or "kJ" or something else (doesn't really matter, it's only used to display energy values) Setting('ENERGY_UNIT', 'kcal'); -// When running grocy in a subdirectory, this should be set to the relative path, otherwise empty +// When running Grocy in a subdirectory, this should be set to the relative path, otherwise empty // It needs to be set to the part (of the URL) AFTER the document root, // if URL rewriting is disabled, including index.php // Example with URL Rewriting support: @@ -105,7 +105,7 @@ Setting('GROCYCODE_TYPE', '1D'); // Label printer settings -Setting('LABEL_PRINTER_WEBHOOK', ''); // The URI that grocy will POST to when asked to print a label +Setting('LABEL_PRINTER_WEBHOOK', ''); // The URI that Grocy will POST to when asked to print a label Setting('LABEL_PRINTER_RUN_SERVER', true); // Whether the webhook will be called server- or client-side Setting('LABEL_PRINTER_PARAMS', ['font_family' => 'Source Sans Pro (Regular)']); // Additional parameters supplied to the webhook Setting('LABEL_PRINTER_HOOK_JSON', false); // TRUE to use JSON or FALSE to use normal POST request variables diff --git a/controllers/CalendarApiController.php b/controllers/CalendarApiController.php index 587b8397..d1d57806 100644 --- a/controllers/CalendarApiController.php +++ b/controllers/CalendarApiController.php @@ -24,7 +24,7 @@ class CalendarApiController extends BaseApiController $maxDate = null; $vCalendar = new Calendar(); - $vCalendar->setProductIdentifier('grocy'); + $vCalendar->setProductIdentifier('Grocy'); foreach ($events as $event) { @@ -81,7 +81,7 @@ class CalendarApiController extends BaseApiController $response->write((new CalendarFactory())->createCalendar($vCalendar)); $response = $response->withHeader('Content-Type', 'text/calendar; charset=utf-8'); - return $response->withHeader('Content-Disposition', 'attachment; filename="grocy.ics"'); + return $response->withHeader('Content-Disposition', 'attachment; filename="Grocy.ics"'); } catch (\Exception $ex) { diff --git a/controllers/GrocycodeTrait.php b/controllers/GrocycodeTrait.php index fcc38eae..4d52cb8b 100644 --- a/controllers/GrocycodeTrait.php +++ b/controllers/GrocycodeTrait.php @@ -27,7 +27,7 @@ trait GrocycodeTrait if ($isDownload) { $response = $response->withHeader('Content-Type', 'application/octet-stream') - ->withHeader('Content-Disposition', 'attachment; filename=grocycode.png') + ->withHeader('Content-Disposition', 'attachment; filename=Grocycode.png') ->withHeader('Content-Length', strlen($png)) ->withHeader('Cache-Control', 'no-cache') ->withHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT'); diff --git a/docs/grocycode.md b/docs/grocycode.md index e80f6646..4dd77501 100644 --- a/docs/grocycode.md +++ b/docs/grocycode.md @@ -1,15 +1,15 @@ -grocycode +Grocycode ========== -grocycode is, in essence, a simple way to reference to arbitrary grocy entities. -Each grocycode includes a magic, an entitiy identifier, an id and an ordered set of extra data. -It is supported to be entered anywhere grocy expects one to read a barcode, but can also reference -grocy-internal properties like specific stock entries, or specific batteries. +Grocycode is, in essence, a simple way to reference to arbitrary Grocy entities. +Each Grocycode includes a magic, an entitiy identifier, an id and an ordered set of extra data. +It is supported to be entered anywhere Grocy expects one to read a barcode, but can also reference +Grocy-internal properties like specific stock entries, or specific batteries. Serialization ---- -There are three mandatory parts in a grocycode: +There are three mandatory parts in a Grocycode: 1. The magic `grcy` 2. An entity identifer matching the regular expression `[a-z]+` (that is, lowercase english alphabet without any fancy accents, minimum length 1 character). diff --git a/docs/label-printing.md b/docs/label-printing.md index c3934f6a..9599c966 100644 --- a/docs/label-printing.md +++ b/docs/label-printing.md @@ -6,8 +6,8 @@ To enable label printing, set `FEATURE_FLAG_LABEL_PRINTER` to `true`in your `con Why webhook? --- -Label printers come in all shapes and forms, and your particular one is probably not the one used by the author of this feature. Also, grocy may does not have a -direct connection to a local label printer (e.g. grocy is hosted in a cloud vps). Thus, a lightweight implementation is provided by grocy: whenever something +Label printers come in all shapes and forms, and your particular one is probably not the one used by the author of this feature. Also, Grocy may does not have a +direct connection to a local label printer (e.g. Grocy is hosted in a cloud vps). Thus, a lightweight implementation is provided by Grocy: whenever something should print, a POST request to a configured URL is made. The target then is responsible for label printing. Reference implementation @@ -19,8 +19,8 @@ implemented into [a fork of brother_ql_web](https://github.com/mistressofjellyfi Webhook request --- -Requests can be configured to be sent server-side (that is, from the machine hosting grocy through GuzzleHttp) or by an AJAX request directly from the browser. -The latter is neccesary for situations where the grocy hosting machine cannot reach your label printer, however server-side requests are a bit faster and +Requests can be configured to be sent server-side (that is, from the machine hosting Grocy through GuzzleHttp) or by an AJAX request directly from the browser. +The latter is neccesary for situations where the Grocy hosting machine cannot reach your label printer, however server-side requests are a bit faster and tend to be more stable. Both methods fire this request upon printing: diff --git a/grocy.openapi.json b/grocy.openapi.json index 533d67a0..e2a69341 100644 --- a/grocy.openapi.json +++ b/grocy.openapi.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "title": "grocy REST API", + "title": "Grocy REST API", "description": "Authentication is done via API keys (header *GROCY-API-KEY* or same named query parameter), which you can manage [here](PlaceHolderManageApiKeysUrl).
Additionally requests from within the frontend are also valid (via session cookie).", "version": "xxx", "license": { @@ -60,7 +60,7 @@ "paths": { "/system/info": { "get": { - "summary": "Returns information about the installed grocy version, PHP runtime and OS", + "summary": "Returns information about the installed Grocy version, PHP runtime and OS", "tags": [ "System" ], @@ -1550,7 +1550,7 @@ }, "/stock/entry/{entryId}/printlabel": { "get": { - "summary": "Prints the grocycode / stock entry label of the given entry on the configured label printer", + "summary": "Prints the Grocycode / stock entry label of the given entry on the configured label printer", "tags": [ "Stock" ], @@ -2281,7 +2281,7 @@ }, "/stock/products/{productId}/printlabel": { "get": { - "summary": "Prints the grocycode label of the given product on the configured label printer", + "summary": "Prints the Grocycode label of the given product on the configured label printer", "tags": [ "Stock" ], @@ -3582,7 +3582,7 @@ }, "/recipes/{recipeId}/printlabel": { "get": { - "summary": "Prints the grocycode label of the given recipe on the configured label printer", + "summary": "Prints the Grocycode label of the given recipe on the configured label printer", "tags": [ "Recipes" ], @@ -3855,7 +3855,7 @@ }, "/chores/{choreId}/printlabel": { "get": { - "summary": "Prints the grocycode label of the given chore on the configured label printer", + "summary": "Prints the Grocycode label of the given chore on the configured label printer", "tags": [ "Chores" ], @@ -4120,7 +4120,7 @@ }, "/batteries/{batteryId}/printlabel": { "get": { - "summary": "Prints the grocycode label of the given battery on the configured label printer", + "summary": "Prints the Grocycode label of the given battery on the configured label printer", "tags": [ "Batteries" ], @@ -4368,7 +4368,7 @@ "in": "query", "name": "printHeader", "required": false, - "description": "Prints grocy logo if true", + "description": "Prints Grocy logo if true", "schema": { "type": "boolean", "default": true diff --git a/helpers/Grocycode.php b/helpers/Grocycode.php index 5016493e..9eb4a3a4 100644 --- a/helpers/Grocycode.php +++ b/helpers/Grocycode.php @@ -3,10 +3,10 @@ namespace Grocy\Helpers; /** - * A class that abstracts grocycode. + * A class that abstracts Grocycode. * - * grocycode is a simple, easily serializable format to reference - * stuff within grocy. It consists of n (n ≥ 3) double-colon seperated parts: + * Grocycode is a simple, easily serializable format to reference + * stuff within Grocy. It consists of n (n ≥ 3) double-colon seperated parts: * * 1. The magic `grcy` * 2. A type identifer, must match `[a-z]+` (i.e. only lowercase ascii, minimum length 1 character) @@ -96,12 +96,12 @@ class Grocycode $parts = array_reverse(explode(':', $code)); if (array_pop($parts) != self::MAGIC) { - throw new \Exception('Not a grocycode'); + throw new \Exception('Not a Grocycode'); } if (!in_array($this->type = array_pop($parts), self::$Items)) { - throw new \Exception('Unknown grocycode type'); + throw new \Exception('Unknown Grocycode type'); } $this->id = array_pop($parts); @@ -116,7 +116,7 @@ class Grocycode } if (!in_array($type, self::$Items)) { - throw new \Exception('Unknown grocycode type'); + throw new \Exception('Unknown Grocycode type'); } $this->type = $type; diff --git a/localization/strings.pot b/localization/strings.pot index 48be5761..6fc5581c 100644 --- a/localization/strings.pot +++ b/localization/strings.pot @@ -345,7 +345,7 @@ msgstr "" msgid "Removed %1$s of %2$s from stock" msgstr "" -msgid "About grocy" +msgid "About Grocy" msgstr "" msgid "Close" @@ -1338,7 +1338,7 @@ msgstr "" msgid "Price factor" msgstr "" -msgid "Do you find grocy useful?" +msgid "Do you find Grocy useful?" msgstr "" msgid "Say thanks" @@ -1457,7 +1457,7 @@ msgstr "" msgid "Edit stock entry" msgstr "" -msgid "Camera access is only possible when supported and allowed by your browser and when grocy is served via a secure (https://) connection" +msgid "Camera access is only possible when supported and allowed by your browser and when Grocy is served via a secure (https://) connection" msgstr "" msgid "Keep screen on" @@ -2004,17 +2004,17 @@ msgstr "" msgid "A product or a note is required" msgstr "" -msgid "grocycode" +msgid "Grocycode" msgstr "" msgid "Download" msgstr "" -# Example: Download *Product* grocycode -msgid "Download %s grocycode" +# Example: Download *Product* Grocycode +msgid "Download %s Grocycode" msgstr "" -msgid "grocycode is a unique referer to this %s in your grocy instance - print it onto a label and scan it like any other barcode" +msgid "Grocycode is a unique referer to this %s in your Grocy instance - print it onto a label and scan it like any other barcode" msgstr "" # Abbreviation for "due date" @@ -2042,8 +2042,8 @@ msgstr "" msgid "Error while executing WebHook" msgstr "" -# Example: Print *Product* grocycode on label printer -msgid "Print %s grocycode on label printer" +# Example: Print *Product* Grocycode on label printer +msgid "Print %s Grocycode on label printer" msgstr "" msgid "Open stock entry label in new window" diff --git a/public/css/grocy_night_mode.css b/public/css/grocy_night_mode.css index c6d16c1d..ab65cb46 100644 --- a/public/css/grocy_night_mode.css +++ b/public/css/grocy_night_mode.css @@ -4,10 +4,6 @@ body.night-mode, background-color: #333131; } -.night-mode .navbar-brand img { - filter: invert(0.9) hue-rotate(176deg); -} - .navbar-light .navbar-toggler { color: rgba(255, 255, 255, .5); border-color: rgba(255, 255, 255, .1); diff --git a/public/img/appicons/android-chrome-192x192.png b/public/img/appicons/android-chrome-192x192.png deleted file mode 100644 index d6872619..00000000 Binary files a/public/img/appicons/android-chrome-192x192.png and /dev/null differ diff --git a/public/img/appicons/android-chrome-512x512.png b/public/img/appicons/android-chrome-512x512.png deleted file mode 100644 index 278c5933..00000000 Binary files a/public/img/appicons/android-chrome-512x512.png and /dev/null differ diff --git a/public/img/appicons/apple-touch-icon.png b/public/img/appicons/apple-touch-icon.png deleted file mode 100644 index 40be557f..00000000 Binary files a/public/img/appicons/apple-touch-icon.png and /dev/null differ diff --git a/public/img/appicons/browserconfig.xml b/public/img/appicons/browserconfig.xml deleted file mode 100644 index 3ec33a6b..00000000 --- a/public/img/appicons/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #e5e5e5 - - - diff --git a/public/img/appicons/favicon-16x16.png b/public/img/appicons/favicon-16x16.png deleted file mode 100644 index a8d4ed5c..00000000 Binary files a/public/img/appicons/favicon-16x16.png and /dev/null differ diff --git a/public/img/appicons/favicon-32x32.png b/public/img/appicons/favicon-32x32.png deleted file mode 100644 index bcc19822..00000000 Binary files a/public/img/appicons/favicon-32x32.png and /dev/null differ diff --git a/public/img/appicons/favicon.ico b/public/img/appicons/favicon.ico deleted file mode 100644 index f81e3fda..00000000 Binary files a/public/img/appicons/favicon.ico and /dev/null differ diff --git a/public/img/appicons/mstile-150x150.png b/public/img/appicons/mstile-150x150.png deleted file mode 100644 index 4c5c3271..00000000 Binary files a/public/img/appicons/mstile-150x150.png and /dev/null differ diff --git a/public/img/appicons/safari-pinned-tab.svg b/public/img/appicons/safari-pinned-tab.svg deleted file mode 100644 index 7bbb4630..00000000 --- a/public/img/appicons/safari-pinned-tab.svg +++ /dev/null @@ -1,267 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/public/img/appicons/site.webmanifest b/public/img/appicons/site.webmanifest deleted file mode 100644 index 97cc6955..00000000 --- a/public/img/appicons/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "grocy", - "short_name": "grocy", - "icons": [ - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/public/img/grocy_icon.svg b/public/img/grocy_icon.svg deleted file mode 100644 index 5e80ca3e..00000000 --- a/public/img/grocy_icon.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - -Created by potrace 1.15, written by Peter Selinger 2001-2017 - - - - - diff --git a/public/img/grocy_logo.svg b/public/img/grocy_logo.svg deleted file mode 100644 index 8525d8a0..00000000 --- a/public/img/grocy_logo.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - -Created by potrace 1.15, written by Peter Selinger 2001-2017 - - - - - diff --git a/public/img/icon-1024.png b/public/img/icon-1024.png new file mode 100644 index 00000000..2c720607 Binary files /dev/null and b/public/img/icon-1024.png differ diff --git a/public/img/icon-32.png b/public/img/icon-32.png new file mode 100644 index 00000000..d360d0b3 Binary files /dev/null and b/public/img/icon-32.png differ diff --git a/public/img/icon.svg b/public/img/icon.svg new file mode 100644 index 00000000..24bb0d25 --- /dev/null +++ b/public/img/icon.svg @@ -0,0 +1,21 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + diff --git a/public/img/logo.svg b/public/img/logo.svg new file mode 100644 index 00000000..0470f8fa --- /dev/null +++ b/public/img/logo.svg @@ -0,0 +1,42 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + diff --git a/public/index.php b/public/index.php index 12546063..0aa8289f 100644 --- a/public/index.php +++ b/public/index.php @@ -39,7 +39,7 @@ try } catch (ERequirementNotMet $ex) { - exit('Unable to run grocy: ' . $ex->getMessage()); + exit('Unable to run Grocy: ' . $ex->getMessage()); } require_once __DIR__ . '/../app.php'; diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 00000000..69d3fbed --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,15 @@ +{ + "name": "Grocy", + "short_name": "Grocy", + "icons": [ + { + "src": "./img/icon-1024.png", + "sizes": "1024x1024", + "type": "image/png" + } + ], + "start_url": "../", + "background_color": "#6c757d", + "theme_color": "#6c757d", + "display": "standalone" +} diff --git a/public/viewjs/batterytracking.js b/public/viewjs/batterytracking.js index 7ebffe90..72d58d4e 100644 --- a/public/viewjs/batterytracking.js +++ b/public/viewjs/batterytracking.js @@ -154,7 +154,7 @@ $('#battery_id_text_input').on('blur', function(e) var input = $('#battery_id_text_input').val().toString(); var possibleOptionElement = []; - // grocycode handling + // Grocycode handling if (input.startsWith("grcy")) { var gc = input.split(":"); diff --git a/public/viewjs/choretracking.js b/public/viewjs/choretracking.js index a86772ba..64f5d4cf 100644 --- a/public/viewjs/choretracking.js +++ b/public/viewjs/choretracking.js @@ -190,7 +190,7 @@ $('#chore_id_text_input').on('blur', function(e) var input = $('#chore_id_text_input').val().toString(); var possibleOptionElement = []; - // grocycode handling + // Grocycode handling if (input.startsWith("grcy")) { var gc = input.split(":"); diff --git a/public/viewjs/components/barcodescanner.js b/public/viewjs/components/barcodescanner.js index 2f4211de..ade7332f 100644 --- a/public/viewjs/components/barcodescanner.js +++ b/public/viewjs/components/barcodescanner.js @@ -120,7 +120,7 @@ Grocy.Components.BarcodeScanner.StartScanning = function() if (error) { Grocy.FrontendHelpers.ShowGenericError("Error while initializing the barcode scanning library", error.message); - toastr.info(__t("Camera access is only possible when supported and allowed by your browser and when grocy is served via a secure (https://) connection")); + toastr.info(__t("Camera access is only possible when supported and allowed by your browser and when Grocy is served via a secure (https://) connection")); window.localStorage.removeItem("cameraId"); setTimeout(function() { diff --git a/public/viewjs/components/productpicker.js b/public/viewjs/components/productpicker.js index 00f6af7f..5bc95d20 100644 --- a/public/viewjs/components/productpicker.js +++ b/public/viewjs/components/productpicker.js @@ -162,7 +162,7 @@ $('#product_id_text_input').on('blur', function(e) var input = $('#product_id_text_input').val().toString(); var possibleOptionElement = []; - // grocycode handling + // Grocycode handling if (input.startsWith("grcy")) { var gc = input.split(":"); diff --git a/public/viewjs/components/recipepicker.js b/public/viewjs/components/recipepicker.js index d2ab085c..acb31188 100644 --- a/public/viewjs/components/recipepicker.js +++ b/public/viewjs/components/recipepicker.js @@ -77,7 +77,7 @@ $('#recipe_id_text_input').on('blur', function(e) var input = $('#recipe_id_text_input').val().toString(); var possibleOptionElement = []; - // grocycode handling + // Grocycode handling if (input.startsWith("grcy")) { var gc = input.split(":"); diff --git a/public/viewjs/consume.js b/public/viewjs/consume.js index e2dbcf76..01274b8a 100644 --- a/public/viewjs/consume.js +++ b/public/viewjs/consume.js @@ -239,7 +239,7 @@ $("#location_id").on('change', function(e) } else { - // try to get stock id from grocycode + // try to get stock id from Grocycode if ($("#product_id").data("grocycode")) { var gc = $("#product_id").attr("barcode").split(":"); diff --git a/services/PrintService.php b/services/PrintService.php index 4121f381..e53dec70 100644 --- a/services/PrintService.php +++ b/services/PrintService.php @@ -59,7 +59,7 @@ class PrintService extends BaseService $printer->selectPrintMode(Printer::MODE_DOUBLE_WIDTH); $printer->setTextSize(4, 4); $printer->setReverseColors(true); - $printer->text('grocy'); + $printer->text('Grocy'); $printer->setJustification(); $printer->setTextSize(1, 1); $printer->setReverseColors(false); diff --git a/services/StockService.php b/services/StockService.php index cff5def1..c554b307 100644 --- a/services/StockService.php +++ b/services/StockService.php @@ -821,13 +821,13 @@ class StockService extends BaseService public function GetProductIdFromBarcode(string $barcode) { - // first, try to parse this as a product grocycode + // first, try to parse this as a product Grocycode if (Grocycode::Validate($barcode)) { $gc = new Grocycode($barcode); if ($gc->GetType() != Grocycode::PRODUCT) { - throw new \Exception('Invalid grocycode'); + throw new \Exception('Invalid Grocycode'); } return $gc->GetId(); } diff --git a/update.sh b/update.sh index b36ae2f0..08286cfd 100755 --- a/update.sh +++ b/update.sh @@ -3,7 +3,7 @@ GROCY_RELEASE_URL=https://releases.grocy.info/latest -echo Start updating grocy +echo Start updating Grocy set -e shopt -s extglob @@ -32,4 +32,4 @@ rm -f ./grocy-latest.zip > /dev/null popd > /dev/null -echo Finished updating grocy +echo Finished updating Grocy diff --git a/views/about.blade.php b/views/about.blade.php index f3386913..7549244e 100644 --- a/views/about.blade.php +++ b/views/about.blade.php @@ -1,6 +1,6 @@ @extends('layout.default') -@section('title', $__t('About grocy')) +@section('title', $__t('About Grocy')) @section('viewJsName', 'about') @section('content') @@ -41,7 +41,7 @@

- {{ $__t('Do you find grocy useful?') }}
+ {{ $__t('Do you find Grocy useful?') }}
{{ $__t('Say thanks') }} @@ -75,7 +75,7 @@

- grocy is a project by + Grocy is a project by Bernd Bestel
diff --git a/views/batteriesoverview.blade.php b/views/batteriesoverview.blade.php index c33240d5..b1230550 100644 --- a/views/batteriesoverview.blade.php +++ b/views/batteriesoverview.blade.php @@ -154,14 +154,14 @@ - {!! str_replace('grocycode', 'grocycode', $__t('Download %s grocycode', $__t('Battery'))) !!} + {!! str_replace('grocycode', 'Grocycode', $__t('Download %s Grocycode', $__t('Battery'))) !!} @if(GROCY_FEATURE_FLAG_LABEL_PRINTER) - {!! str_replace('grocycode', 'grocycode', $__t('Print %s grocycode on label printer', $__t('Battery'))) !!} + {!! str_replace('Grocycode', 'Grocycode', $__t('Print %s Grocycode on label printer', $__t('Battery'))) !!} @endif diff --git a/views/batteryform.blade.php b/views/batteryform.blade.php index 3f1d1882..47d107b6 100644 --- a/views/batteryform.blade.php +++ b/views/batteryform.blade.php @@ -101,11 +101,11 @@