From 0913c7aa9efbd071bd5c423b5d5de5cf12617185 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:10:55 -0800 Subject: [PATCH 01/34] Fix: share links for URLs containing 'api' incorrect in dropdown (#4701) --- .../share-links-dropdown.component.spec.ts | 20 +++++++++++++++++++ .../share-links-dropdown.component.ts | 5 ++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts index 0abcd4e7c..27955a8a5 100644 --- a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts +++ b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.spec.ts @@ -192,4 +192,24 @@ describe('ShareLinksDropdownComponent', () => { component.share(link) // expect(navigatorSpy).toHaveBeenCalledWith({ url: component.getShareUrl(link) }) }) + + it('should correctly generate share URLs', () => { + environment.apiBaseUrl = 'http://example.com/api/' + expect(component.getShareUrl({ slug: '123abc123' } as any)).toEqual( + 'http://example.com/share/123abc123' + ) + environment.apiBaseUrl = 'http://example.domainwithapiinit.com/api/' + expect(component.getShareUrl({ slug: '123abc123' } as any)).toEqual( + 'http://example.domainwithapiinit.com/share/123abc123' + ) + environment.apiBaseUrl = 'http://example.domainwithapiinit.com:1234/api/' + expect(component.getShareUrl({ slug: '123abc123' } as any)).toEqual( + 'http://example.domainwithapiinit.com:1234/share/123abc123' + ) + environment.apiBaseUrl = + 'http://example.domainwithapiinit.com:1234/subpath/api/' + expect(component.getShareUrl({ slug: '123abc123' } as any)).toEqual( + 'http://example.domainwithapiinit.com:1234/subpath/share/123abc123' + ) + }) }) diff --git a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts index 3aff4823d..fa2df3a54 100644 --- a/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts +++ b/src-ui/src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts @@ -80,7 +80,10 @@ export class ShareLinksDropdownComponent implements OnInit { } getShareUrl(link: PaperlessShareLink): string { - return `${environment.apiBaseUrl.replace('api', 'share')}${link.slug}` + const apiURL = new URL(environment.apiBaseUrl) + return `${apiURL.origin}${apiURL.pathname.replace(/\/api\/$/, '/share/')}${ + link.slug + }` } getDaysRemaining(link: PaperlessShareLink): string { From e1b573adeb3f9b644fb51bd9359b51922df10732 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:28:27 -0800 Subject: [PATCH 02/34] Fix: Add a warning about a low image DPI which may cause OCR to fail (#4708) --- src/paperless_tesseract/parsers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index f64ea8adf..3523da7bd 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -244,6 +244,10 @@ class RasterisedDocumentParser(DocumentParser): f"no DPI information is present in this image and " f"OCR_IMAGE_DPI is not set.", ) + if ocrmypdf_args["image_dpi"] < 70: # pragma: no cover + self.log.warning( + f"Image DPI of {ocrmypdf_args['image_dpi']} is low, OCR may fail", + ) if settings.OCR_USER_ARGS and not safe_fallback: try: From 5be89bfda5228e19351387351b27ece458528317 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 11:50:30 -0800 Subject: [PATCH 03/34] Changelog v2.0.0 - GHA (#4693) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- docs/changelog.md | 274 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 274 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index 7e9eb7a64..58ef26cd3 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,279 @@ # Changelog +## paperless-ngx 2.0.0 + +### Breaking Changes + +- Breaking: Rename the environment variable for self-signed email certificates [@stumpylog](https://github.com/stumpylog) ([#4346](https://github.com/paperless-ngx/paperless-ngx/pull/4346)) +- Breaking: Drop support for Python 3.8 [@stumpylog](https://github.com/stumpylog) ([#4156](https://github.com/paperless-ngx/paperless-ngx/pull/4156)) +- Breaking: Remove ARMv7 building of the Docker image [@stumpylog](https://github.com/stumpylog) ([#3973](https://github.com/paperless-ngx/paperless-ngx/pull/3973)) + +### Notable Changes + +- Feature: consumption templates [@shamoon](https://github.com/shamoon) ([#4196](https://github.com/paperless-ngx/paperless-ngx/pull/4196)) +- Feature: Share links [@shamoon](https://github.com/shamoon) ([#3996](https://github.com/paperless-ngx/paperless-ngx/pull/3996)) +- Enhancement: Updates the underlying image to use Python 3.11 [@stumpylog](https://github.com/stumpylog) ([#4150](https://github.com/paperless-ngx/paperless-ngx/pull/4150)) + +### Features + +- Feature: compact notifications [@shamoon](https://github.com/shamoon) ([#4545](https://github.com/paperless-ngx/paperless-ngx/pull/4545)) +- Chore: Backend bulk updates [@stumpylog](https://github.com/stumpylog) ([#4509](https://github.com/paperless-ngx/paperless-ngx/pull/4509)) +- Feature: Hungarian translation [@shamoon](https://github.com/shamoon) ([#4552](https://github.com/paperless-ngx/paperless-ngx/pull/4552)) +- Chore: API support for id args for documents \& objects [@shamoon](https://github.com/shamoon) ([#4519](https://github.com/paperless-ngx/paperless-ngx/pull/4519)) +- Feature: Add Bulgarian translation [@shamoon](https://github.com/shamoon) ([#4470](https://github.com/paperless-ngx/paperless-ngx/pull/4470)) +- Feature: Audit Trail [@nanokatz](https://github.com/nanokatz) ([#4425](https://github.com/paperless-ngx/paperless-ngx/pull/4425)) +- Feature: Add ahead of time compression of the static files for x86_64 [@stumpylog](https://github.com/stumpylog) ([#4390](https://github.com/paperless-ngx/paperless-ngx/pull/4390)) +- Feature: sort sidebar views [@shamoon](https://github.com/shamoon) ([#4381](https://github.com/paperless-ngx/paperless-ngx/pull/4381)) +- Feature: Switches to a new client to handle communication with Gotenberg [@stumpylog](https://github.com/stumpylog) ([#4391](https://github.com/paperless-ngx/paperless-ngx/pull/4391)) +- barcode logic: strip non-numeric characters from detected ASN string [@queaker](https://github.com/queaker) ([#4379](https://github.com/paperless-ngx/paperless-ngx/pull/4379)) +- Feature: Include more updated base tools in Docker image [@stumpylog](https://github.com/stumpylog) ([#4319](https://github.com/paperless-ngx/paperless-ngx/pull/4319)) +- CI: speed-up frontend tests on ci [@shamoon](https://github.com/shamoon) ([#4316](https://github.com/paperless-ngx/paperless-ngx/pull/4316)) +- Feature: password reset [@shamoon](https://github.com/shamoon) ([#4289](https://github.com/paperless-ngx/paperless-ngx/pull/4289)) +- Enhancement: dashboard improvements, drag-n-drop reorder dashboard views [@shamoon](https://github.com/shamoon) ([#4252](https://github.com/paperless-ngx/paperless-ngx/pull/4252)) +- Feature: Updates Django to 4.2.5 [@stumpylog](https://github.com/stumpylog) ([#4278](https://github.com/paperless-ngx/paperless-ngx/pull/4278)) +- Enhancement: settings reorganization \& improvements, separate admin section [@shamoon](https://github.com/shamoon) ([#4251](https://github.com/paperless-ngx/paperless-ngx/pull/4251)) +- Feature: consumption templates [@shamoon](https://github.com/shamoon) ([#4196](https://github.com/paperless-ngx/paperless-ngx/pull/4196)) +- Enhancement: support default permissions for object creation via frontend [@shamoon](https://github.com/shamoon) ([#4233](https://github.com/paperless-ngx/paperless-ngx/pull/4233)) +- Fix: Set permissions before declaring volumes for rootless [@stumpylog](https://github.com/stumpylog) ([#4225](https://github.com/paperless-ngx/paperless-ngx/pull/4225)) +- Enhancement: bulk edit object permissions [@shamoon](https://github.com/shamoon) ([#4176](https://github.com/paperless-ngx/paperless-ngx/pull/4176)) +- Enhancement: Allow the user the specifiy the export zip file name [@stumpylog](https://github.com/stumpylog) ([#4189](https://github.com/paperless-ngx/paperless-ngx/pull/4189)) +- Feature: Share links [@shamoon](https://github.com/shamoon) ([#3996](https://github.com/paperless-ngx/paperless-ngx/pull/3996)) +- Chore: update docker image and ci to node 20 [@shamoon](https://github.com/shamoon) ([#4184](https://github.com/paperless-ngx/paperless-ngx/pull/4184)) +- Fix: Trim unneeded libraries from Docker image [@stumpylog](https://github.com/stumpylog) ([#4183](https://github.com/paperless-ngx/paperless-ngx/pull/4183)) +- Feature: New management command for fuzzy matching document content [@stumpylog](https://github.com/stumpylog) ([#4160](https://github.com/paperless-ngx/paperless-ngx/pull/4160)) +- Enhancement: Updates the underlying image to use Python 3.11 [@stumpylog](https://github.com/stumpylog) ([#4150](https://github.com/paperless-ngx/paperless-ngx/pull/4150)) +- Enhancement: frontend better handle slow backend requests [@shamoon](https://github.com/shamoon) ([#4055](https://github.com/paperless-ngx/paperless-ngx/pull/4055)) +- Chore: update docker image \& ci testing node to v18 [@shamoon](https://github.com/shamoon) ([#4149](https://github.com/paperless-ngx/paperless-ngx/pull/4149)) +- Enhancement: Improved error notifications [@shamoon](https://github.com/shamoon) ([#4062](https://github.com/paperless-ngx/paperless-ngx/pull/4062)) +- Feature: Official support for Python 3.11 [@stumpylog](https://github.com/stumpylog) ([#4146](https://github.com/paperless-ngx/paperless-ngx/pull/4146)) +- Enhancement: Add Afrikaans, Greek \& Norwegian languages [@shamoon](https://github.com/shamoon) ([#4088](https://github.com/paperless-ngx/paperless-ngx/pull/4088)) +- Enhancement: add task id to pre/post consume script as env [@andreheuer](https://github.com/andreheuer) ([#4037](https://github.com/paperless-ngx/paperless-ngx/pull/4037)) +- Enhancement: update bootstrap to v5.3.1 for backend static pages [@shamoon](https://github.com/shamoon) ([#4060](https://github.com/paperless-ngx/paperless-ngx/pull/4060)) + +### Bug Fixes + +- Fix: Add missing spaces to help string in [@joouha](https://github.com/joouha) ([#4674](https://github.com/paperless-ngx/paperless-ngx/pull/4674)) +- Fix: Typo invalidates precondition for doctype, resulting in Exception [@ArminGruner](https://github.com/ArminGruner) ([#4668](https://github.com/paperless-ngx/paperless-ngx/pull/4668)) +- Fix: Miscellaneous visual fixes in v2.0.0-beta.rc1 2 [@shamoon](https://github.com/shamoon) ([#4635](https://github.com/paperless-ngx/paperless-ngx/pull/4635)) +- Fix: Delay consumption after MODIFY inotify events [@frozenbrain](https://github.com/frozenbrain) ([#4626](https://github.com/paperless-ngx/paperless-ngx/pull/4626)) +- Documentation: Add note that trash dir must exist [@shamoon](https://github.com/shamoon) ([#4608](https://github.com/paperless-ngx/paperless-ngx/pull/4608)) +- Fix: Miscellaneous v2.0 visual fixes [@shamoon](https://github.com/shamoon) ([#4576](https://github.com/paperless-ngx/paperless-ngx/pull/4576)) +- Fix: Force UTF-8 for exporter manifests and don't allow escaping [@stumpylog](https://github.com/stumpylog) ([#4574](https://github.com/paperless-ngx/paperless-ngx/pull/4574)) +- Fix: plain text preview overflows [@shamoon](https://github.com/shamoon) ([#4555](https://github.com/paperless-ngx/paperless-ngx/pull/4555)) +- Fix: add permissions for custom fields with migration [@shamoon](https://github.com/shamoon) ([#4513](https://github.com/paperless-ngx/paperless-ngx/pull/4513)) +- Fix: visually hidden text breaks delete button wrap [@shamoon](https://github.com/shamoon) ([#4462](https://github.com/paperless-ngx/paperless-ngx/pull/4462)) +- Fix: API statistics document_file_type_counts return type [@shamoon](https://github.com/shamoon) ([#4464](https://github.com/paperless-ngx/paperless-ngx/pull/4464)) +- Fix: Always return a list for audit log check [@shamoon](https://github.com/shamoon) ([#4463](https://github.com/paperless-ngx/paperless-ngx/pull/4463)) +- Fix: Only create a Correspondent if the email matches rule filters [@stumpylog](https://github.com/stumpylog) ([#4431](https://github.com/paperless-ngx/paperless-ngx/pull/4431)) +- Fix: Combination of consume template with recursive tagging [@stumpylog](https://github.com/stumpylog) ([#4442](https://github.com/paperless-ngx/paperless-ngx/pull/4442)) +- Fix: replace drag drop \& clipboard deps with angular cdk [@shamoon](https://github.com/shamoon) ([#4362](https://github.com/paperless-ngx/paperless-ngx/pull/4362)) +- Fix: update document modified time on note creation / deletion [@shamoon](https://github.com/shamoon) ([#4374](https://github.com/paperless-ngx/paperless-ngx/pull/4374)) +- Fix: Updates to latest imap_tools which includes fix for the meta charset in HTML content [@stumpylog](https://github.com/stumpylog) ([#4355](https://github.com/paperless-ngx/paperless-ngx/pull/4355)) +- Fix: Missing creation of a folder in Docker image [@stumpylog](https://github.com/stumpylog) ([#4347](https://github.com/paperless-ngx/paperless-ngx/pull/4347)) +- Fix: Retry Tika parsing when Tika returns HTTP 500 [@stumpylog](https://github.com/stumpylog) ([#4334](https://github.com/paperless-ngx/paperless-ngx/pull/4334)) +- Fix: get highest ASN regardless of user [@shamoon](https://github.com/shamoon) ([#4326](https://github.com/paperless-ngx/paperless-ngx/pull/4326)) +- Fix: Generate secret key with C locale and increase allowed characters [@stumpylog](https://github.com/stumpylog) ([#4277](https://github.com/paperless-ngx/paperless-ngx/pull/4277)) +- Fix: long notes cause visual overflow [@shamoon](https://github.com/shamoon) ([#4287](https://github.com/paperless-ngx/paperless-ngx/pull/4287)) +- Fix: Ensures all old connections are closed in certain long lived places [@stumpylog](https://github.com/stumpylog) ([#4265](https://github.com/paperless-ngx/paperless-ngx/pull/4265)) +- CI: fix playwright browser version mismatch failures [@shamoon](https://github.com/shamoon) ([#4239](https://github.com/paperless-ngx/paperless-ngx/pull/4239)) +- Fix: Set a non-zero polling internal when inotify cannot import [@stumpylog](https://github.com/stumpylog) ([#4230](https://github.com/paperless-ngx/paperless-ngx/pull/4230)) +- Fix: Set permissions before declaring volumes for rootless [@stumpylog](https://github.com/stumpylog) ([#4225](https://github.com/paperless-ngx/paperless-ngx/pull/4225)) +- Documentation: Fix fuzzy matching details [@stumpylog](https://github.com/stumpylog) ([#4207](https://github.com/paperless-ngx/paperless-ngx/pull/4207)) +- Fix: application of theme color vars at root [@shamoon](https://github.com/shamoon) ([#4193](https://github.com/paperless-ngx/paperless-ngx/pull/4193)) +- Fix: Trim unneeded libraries from Docker image [@stumpylog](https://github.com/stumpylog) ([#4183](https://github.com/paperless-ngx/paperless-ngx/pull/4183)) +- Fix: support storage path placeholder via API [@shamoon](https://github.com/shamoon) ([#4179](https://github.com/paperless-ngx/paperless-ngx/pull/4179)) +- Fix: Logs the errors during thumbnail generation [@stumpylog](https://github.com/stumpylog) ([#4171](https://github.com/paperless-ngx/paperless-ngx/pull/4171)) +- Fix: remove owner details from saved_views api endpoint [@shamoon](https://github.com/shamoon) ([#4158](https://github.com/paperless-ngx/paperless-ngx/pull/4158)) +- Fix: dashboard widget card borders hidden by bkgd color [@shamoon](https://github.com/shamoon) ([#4155](https://github.com/paperless-ngx/paperless-ngx/pull/4155)) +- Fix: hide entire add user / group buttons if insufficient permissions [@shamoon](https://github.com/shamoon) ([#4133](https://github.com/paperless-ngx/paperless-ngx/pull/4133)) + +### Documentation + +- Documentation: Update documentation to refer only to Docker Compose v2 command [@stumpylog](https://github.com/stumpylog) ([#4650](https://github.com/paperless-ngx/paperless-ngx/pull/4650)) +- Documentation: fix typo, add to features list [@tooomm](https://github.com/tooomm) ([#4624](https://github.com/paperless-ngx/paperless-ngx/pull/4624)) +- Documentation: Add note that trash dir must exist [@shamoon](https://github.com/shamoon) ([#4608](https://github.com/paperless-ngx/paperless-ngx/pull/4608)) +- Documentation: Structure backup sections more clearly [@quantenProjects](https://github.com/quantenProjects) ([#4559](https://github.com/paperless-ngx/paperless-ngx/pull/4559)) +- Documentation: update docs, screenshots ahead of Paperless-ngx v2.0 [@shamoon](https://github.com/shamoon) ([#4542](https://github.com/paperless-ngx/paperless-ngx/pull/4542)) +- Chore: Cleanup command arguments and standardize process count handling [@stumpylog](https://github.com/stumpylog) ([#4541](https://github.com/paperless-ngx/paperless-ngx/pull/4541)) +- Add section for SELinux troubleshooting [@nachtjasmin](https://github.com/nachtjasmin) ([#4528](https://github.com/paperless-ngx/paperless-ngx/pull/4528)) +- Documentation: clarify document_exporter includes settings [@coaxial](https://github.com/coaxial) ([#4533](https://github.com/paperless-ngx/paperless-ngx/pull/4533)) +- Change: Install script improvements [@m-GDEV](https://github.com/m-GDEV) ([#4387](https://github.com/paperless-ngx/paperless-ngx/pull/4387)) +- Fix: update document modified time on note creation / deletion [@shamoon](https://github.com/shamoon) ([#4374](https://github.com/paperless-ngx/paperless-ngx/pull/4374)) +- Fix: correct set owner API location in docs, additional test [@shamoon](https://github.com/shamoon) ([#4366](https://github.com/paperless-ngx/paperless-ngx/pull/4366)) +- Documentation: Remove old information about building the Docker image locally [@stumpylog](https://github.com/stumpylog) ([#4354](https://github.com/paperless-ngx/paperless-ngx/pull/4354)) +- Documentation enhancement: add direct links for all config vars [@shamoon](https://github.com/shamoon) ([#4237](https://github.com/paperless-ngx/paperless-ngx/pull/4237)) +- Documentation: Fix fuzzy matching details [@stumpylog](https://github.com/stumpylog) ([#4207](https://github.com/paperless-ngx/paperless-ngx/pull/4207)) + +### Maintenance + +- Chore: Backend bulk updates [@stumpylog](https://github.com/stumpylog) ([#4509](https://github.com/paperless-ngx/paperless-ngx/pull/4509)) +- Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#4476](https://github.com/paperless-ngx/paperless-ngx/pull/4476)) +- Feature: Add Bulgarian translation [@shamoon](https://github.com/shamoon) ([#4470](https://github.com/paperless-ngx/paperless-ngx/pull/4470)) +- Chore: Stop duplicated action runs against internal PRs [@stumpylog](https://github.com/stumpylog) ([#4430](https://github.com/paperless-ngx/paperless-ngx/pull/4430)) +- CI: separate frontend deps install [@shamoon](https://github.com/shamoon) ([#4336](https://github.com/paperless-ngx/paperless-ngx/pull/4336)) +- CI: speed-up frontend tests on ci [@shamoon](https://github.com/shamoon) ([#4316](https://github.com/paperless-ngx/paperless-ngx/pull/4316)) +- Fix: Generate secret key with C locale and increase allowed characters [@stumpylog](https://github.com/stumpylog) ([#4277](https://github.com/paperless-ngx/paperless-ngx/pull/4277)) +- Bump leonsteinhaeuser/project-beta-automations from 2.1.0 to 2.2.1 [@dependabot](https://github.com/dependabot) ([#4281](https://github.com/paperless-ngx/paperless-ngx/pull/4281)) +- Chore: Updates dependabot to group more dependencies [@stumpylog](https://github.com/stumpylog) ([#4280](https://github.com/paperless-ngx/paperless-ngx/pull/4280)) +- Change: update translation string for tasks dialog [@shamoon](https://github.com/shamoon) ([#4263](https://github.com/paperless-ngx/paperless-ngx/pull/4263)) +- CI: fix playwright browser version mismatch failures [@shamoon](https://github.com/shamoon) ([#4239](https://github.com/paperless-ngx/paperless-ngx/pull/4239)) +- Bump docker/login-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4221](https://github.com/paperless-ngx/paperless-ngx/pull/4221)) +- Bump docker/setup-buildx-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4220](https://github.com/paperless-ngx/paperless-ngx/pull/4220)) +- Bump docker/setup-qemu-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4211](https://github.com/paperless-ngx/paperless-ngx/pull/4211)) +- Bump stumpylog/image-cleaner-action from 0.2.0 to 0.3.0 [@dependabot](https://github.com/dependabot) ([#4210](https://github.com/paperless-ngx/paperless-ngx/pull/4210)) +- Bump docker/metadata-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4209](https://github.com/paperless-ngx/paperless-ngx/pull/4209)) +- Bump docker/build-push-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4212](https://github.com/paperless-ngx/paperless-ngx/pull/4212)) +- Bump actions/checkout from 3 to 4 [@dependabot](https://github.com/dependabot) ([#4208](https://github.com/paperless-ngx/paperless-ngx/pull/4208)) +- Chore: update docker image and ci to node 20 [@shamoon](https://github.com/shamoon) ([#4184](https://github.com/paperless-ngx/paperless-ngx/pull/4184)) + +### Dependencies + +
+39 changes + +- Chore: Bulk update of Python dependencies [@stumpylog](https://github.com/stumpylog) ([#4688](https://github.com/paperless-ngx/paperless-ngx/pull/4688)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4479](https://github.com/paperless-ngx/paperless-ngx/pull/4479)) +- Bump [@playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot) ([#4480](https://github.com/paperless-ngx/paperless-ngx/pull/4480)) +- Bump concurrently from 8.2.1 to 8.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4481](https://github.com/paperless-ngx/paperless-ngx/pull/4481)) +- Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#4478](https://github.com/paperless-ngx/paperless-ngx/pull/4478)) +- Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#4477](https://github.com/paperless-ngx/paperless-ngx/pull/4477)) +- Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#4476](https://github.com/paperless-ngx/paperless-ngx/pull/4476)) +- Bump [@babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot](https://github.com/babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot) ([#4389](https://github.com/paperless-ngx/paperless-ngx/pull/4389)) +- Fix: replace drag drop \& clipboard deps with angular cdk [@shamoon](https://github.com/shamoon) ([#4362](https://github.com/paperless-ngx/paperless-ngx/pull/4362)) +- Bump postcss from 8.4.12 to 8.4.31 in /src/paperless_mail/templates [@dependabot](https://github.com/dependabot) ([#4318](https://github.com/paperless-ngx/paperless-ngx/pull/4318)) +- Bump [@types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot](https://github.com/types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot) ([#4303](https://github.com/paperless-ngx/paperless-ngx/pull/4303)) +- Bump the frontend-angular-dependencies group in /src-ui with 8 updates [@dependabot](https://github.com/dependabot) ([#4302](https://github.com/paperless-ngx/paperless-ngx/pull/4302)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4283](https://github.com/paperless-ngx/paperless-ngx/pull/4283)) +- Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#4282](https://github.com/paperless-ngx/paperless-ngx/pull/4282)) +- Bump [@types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot](https://github.com/types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot) ([#4284](https://github.com/paperless-ngx/paperless-ngx/pull/4284)) +- Bump leonsteinhaeuser/project-beta-automations from 2.1.0 to 2.2.1 [@dependabot](https://github.com/dependabot) ([#4281](https://github.com/paperless-ngx/paperless-ngx/pull/4281)) +- Bump zone.js from 0.13.1 to 0.13.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#4223](https://github.com/paperless-ngx/paperless-ngx/pull/4223)) +- Bump [@types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot](https://github.com/types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot) ([#4224](https://github.com/paperless-ngx/paperless-ngx/pull/4224)) +- Bump the frontend-angular-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4222](https://github.com/paperless-ngx/paperless-ngx/pull/4222)) +- Bump docker/login-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4221](https://github.com/paperless-ngx/paperless-ngx/pull/4221)) +- Bump docker/setup-buildx-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4220](https://github.com/paperless-ngx/paperless-ngx/pull/4220)) +- Bump docker/setup-qemu-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4211](https://github.com/paperless-ngx/paperless-ngx/pull/4211)) +- Bump bootstrap from 5.3.1 to 5.3.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4217](https://github.com/paperless-ngx/paperless-ngx/pull/4217)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4215](https://github.com/paperless-ngx/paperless-ngx/pull/4215)) +- Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4218](https://github.com/paperless-ngx/paperless-ngx/pull/4218)) +- Bump stumpylog/image-cleaner-action from 0.2.0 to 0.3.0 [@dependabot](https://github.com/dependabot) ([#4210](https://github.com/paperless-ngx/paperless-ngx/pull/4210)) +- Bump docker/metadata-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4209](https://github.com/paperless-ngx/paperless-ngx/pull/4209)) +- Bump uuid from 9.0.0 to 9.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4216](https://github.com/paperless-ngx/paperless-ngx/pull/4216)) +- Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#4213](https://github.com/paperless-ngx/paperless-ngx/pull/4213)) +- Bump docker/build-push-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4212](https://github.com/paperless-ngx/paperless-ngx/pull/4212)) +- Bump actions/checkout from 3 to 4 [@dependabot](https://github.com/dependabot) ([#4208](https://github.com/paperless-ngx/paperless-ngx/pull/4208)) +- Chore: update docker image \& ci testing node to v18 [@shamoon](https://github.com/shamoon) ([#4149](https://github.com/paperless-ngx/paperless-ngx/pull/4149)) +- Chore: Unlock dependencies \& update them all [@stumpylog](https://github.com/stumpylog) ([#4142](https://github.com/paperless-ngx/paperless-ngx/pull/4142)) +- Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4112](https://github.com/paperless-ngx/paperless-ngx/pull/4112)) +- Bump tslib from 2.6.1 to 2.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4108](https://github.com/paperless-ngx/paperless-ngx/pull/4108)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4106](https://github.com/paperless-ngx/paperless-ngx/pull/4106)) +- Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) +- Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) +- Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104)) +
+ +### All App Changes + +
+95 changes + +- Fix: Add missing spaces to help string in [@joouha](https://github.com/joouha) ([#4674](https://github.com/paperless-ngx/paperless-ngx/pull/4674)) +- Fix: Typo invalidates precondition for doctype, resulting in Exception [@ArminGruner](https://github.com/ArminGruner) ([#4668](https://github.com/paperless-ngx/paperless-ngx/pull/4668)) +- Fix: dark mode inconsistencies in v2.0.0 beta.rc1 [@shamoon](https://github.com/shamoon) ([#4669](https://github.com/paperless-ngx/paperless-ngx/pull/4669)) +- Fix: dashboard saved view mobile width in v.2.0.0 beta.rc1 [@shamoon](https://github.com/shamoon) ([#4660](https://github.com/paperless-ngx/paperless-ngx/pull/4660)) +- Fix: Miscellaneous visual fixes in v2.0.0-beta.rc1 2 [@shamoon](https://github.com/shamoon) ([#4635](https://github.com/paperless-ngx/paperless-ngx/pull/4635)) +- Fix: Delay consumption after MODIFY inotify events [@frozenbrain](https://github.com/frozenbrain) ([#4626](https://github.com/paperless-ngx/paperless-ngx/pull/4626)) +- Fix: Import of split-manifests can fail [@stumpylog](https://github.com/stumpylog) ([#4623](https://github.com/paperless-ngx/paperless-ngx/pull/4623)) +- Fix: sidebar views dont update after creation in v2.0.0-beta.rc1 [@shamoon](https://github.com/shamoon) ([#4619](https://github.com/paperless-ngx/paperless-ngx/pull/4619)) +- Fix: Prevent text wrap on consumption template label [@shamoon](https://github.com/shamoon) ([#4616](https://github.com/paperless-ngx/paperless-ngx/pull/4616)) +- Fix: increase width of labels in default perms settings [@shamoon](https://github.com/shamoon) ([#4612](https://github.com/paperless-ngx/paperless-ngx/pull/4612)) +- Fix: note deletion fails in v2.0.0-beta.rc1 [@shamoon](https://github.com/shamoon) ([#4602](https://github.com/paperless-ngx/paperless-ngx/pull/4602)) +- Fix: Handle override lists being None [@stumpylog](https://github.com/stumpylog) ([#4598](https://github.com/paperless-ngx/paperless-ngx/pull/4598)) +- Fix: Miscellaneous v2.0 visual fixes [@shamoon](https://github.com/shamoon) ([#4576](https://github.com/paperless-ngx/paperless-ngx/pull/4576)) +- Fix: Force UTF-8 for exporter manifests and don't allow escaping [@stumpylog](https://github.com/stumpylog) ([#4574](https://github.com/paperless-ngx/paperless-ngx/pull/4574)) +- Feature: compact notifications [@shamoon](https://github.com/shamoon) ([#4545](https://github.com/paperless-ngx/paperless-ngx/pull/4545)) +- Chore: Backend bulk updates [@stumpylog](https://github.com/stumpylog) ([#4509](https://github.com/paperless-ngx/paperless-ngx/pull/4509)) +- Fix: plain text preview overflows [@shamoon](https://github.com/shamoon) ([#4555](https://github.com/paperless-ngx/paperless-ngx/pull/4555)) +- Feature: Hungarian translation [@shamoon](https://github.com/shamoon) ([#4552](https://github.com/paperless-ngx/paperless-ngx/pull/4552)) +- Chore: Cleanup command arguments and standardize process count handling [@stumpylog](https://github.com/stumpylog) ([#4541](https://github.com/paperless-ngx/paperless-ngx/pull/4541)) +- Chore: API support for id args for documents \& objects [@shamoon](https://github.com/shamoon) ([#4519](https://github.com/paperless-ngx/paperless-ngx/pull/4519)) +- Fix: add permissions for custom fields with migration [@shamoon](https://github.com/shamoon) ([#4513](https://github.com/paperless-ngx/paperless-ngx/pull/4513)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4479](https://github.com/paperless-ngx/paperless-ngx/pull/4479)) +- Bump [@playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot) ([#4480](https://github.com/paperless-ngx/paperless-ngx/pull/4480)) +- Bump concurrently from 8.2.1 to 8.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4481](https://github.com/paperless-ngx/paperless-ngx/pull/4481)) +- Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#4478](https://github.com/paperless-ngx/paperless-ngx/pull/4478)) +- Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#4477](https://github.com/paperless-ngx/paperless-ngx/pull/4477)) +- Fix: visually hidden text breaks delete button wrap [@shamoon](https://github.com/shamoon) ([#4462](https://github.com/paperless-ngx/paperless-ngx/pull/4462)) +- Fix: API statistics document_file_type_counts return type [@shamoon](https://github.com/shamoon) ([#4464](https://github.com/paperless-ngx/paperless-ngx/pull/4464)) +- Fix: Always return a list for audit log check [@shamoon](https://github.com/shamoon) ([#4463](https://github.com/paperless-ngx/paperless-ngx/pull/4463)) +- Feature: Audit Trail [@nanokatz](https://github.com/nanokatz) ([#4425](https://github.com/paperless-ngx/paperless-ngx/pull/4425)) +- Fix: Only create a Correspondent if the email matches rule filters [@stumpylog](https://github.com/stumpylog) ([#4431](https://github.com/paperless-ngx/paperless-ngx/pull/4431)) +- Fix: Combination of consume template with recursive tagging [@stumpylog](https://github.com/stumpylog) ([#4442](https://github.com/paperless-ngx/paperless-ngx/pull/4442)) +- Feature: Add ahead of time compression of the static files for x86_64 [@stumpylog](https://github.com/stumpylog) ([#4390](https://github.com/paperless-ngx/paperless-ngx/pull/4390)) +- Feature: sort sidebar views [@shamoon](https://github.com/shamoon) ([#4381](https://github.com/paperless-ngx/paperless-ngx/pull/4381)) +- Feature: Switches to a new client to handle communication with Gotenberg [@stumpylog](https://github.com/stumpylog) ([#4391](https://github.com/paperless-ngx/paperless-ngx/pull/4391)) +- barcode logic: strip non-numeric characters from detected ASN string [@queaker](https://github.com/queaker) ([#4379](https://github.com/paperless-ngx/paperless-ngx/pull/4379)) +- Bump [@babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot](https://github.com/babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot) ([#4389](https://github.com/paperless-ngx/paperless-ngx/pull/4389)) +- Fix: replace drag drop \& clipboard deps with angular cdk [@shamoon](https://github.com/shamoon) ([#4362](https://github.com/paperless-ngx/paperless-ngx/pull/4362)) +- Fix: update document modified time on note creation / deletion [@shamoon](https://github.com/shamoon) ([#4374](https://github.com/paperless-ngx/paperless-ngx/pull/4374)) +- Fix: correct set owner API location in docs, additional test [@shamoon](https://github.com/shamoon) ([#4366](https://github.com/paperless-ngx/paperless-ngx/pull/4366)) +- Fix: get highest ASN regardless of user [@shamoon](https://github.com/shamoon) ([#4326](https://github.com/paperless-ngx/paperless-ngx/pull/4326)) +- Bump postcss from 8.4.12 to 8.4.31 in /src/paperless_mail/templates [@dependabot](https://github.com/dependabot) ([#4318](https://github.com/paperless-ngx/paperless-ngx/pull/4318)) +- CI: speed-up frontend tests on ci [@shamoon](https://github.com/shamoon) ([#4316](https://github.com/paperless-ngx/paperless-ngx/pull/4316)) +- Bump [@types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot](https://github.com/types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot) ([#4303](https://github.com/paperless-ngx/paperless-ngx/pull/4303)) +- Bump the frontend-angular-dependencies group in /src-ui with 8 updates [@dependabot](https://github.com/dependabot) ([#4302](https://github.com/paperless-ngx/paperless-ngx/pull/4302)) +- Feature: password reset [@shamoon](https://github.com/shamoon) ([#4289](https://github.com/paperless-ngx/paperless-ngx/pull/4289)) +- Enhancement: dashboard improvements, drag-n-drop reorder dashboard views [@shamoon](https://github.com/shamoon) ([#4252](https://github.com/paperless-ngx/paperless-ngx/pull/4252)) +- Fix: long notes cause visual overflow [@shamoon](https://github.com/shamoon) ([#4287](https://github.com/paperless-ngx/paperless-ngx/pull/4287)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4283](https://github.com/paperless-ngx/paperless-ngx/pull/4283)) +- Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#4282](https://github.com/paperless-ngx/paperless-ngx/pull/4282)) +- Bump [@types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot](https://github.com/types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot) ([#4284](https://github.com/paperless-ngx/paperless-ngx/pull/4284)) +- Fix: Ensures all old connections are closed in certain long lived places [@stumpylog](https://github.com/stumpylog) ([#4265](https://github.com/paperless-ngx/paperless-ngx/pull/4265)) +- Change: update translation string for tasks dialog [@shamoon](https://github.com/shamoon) ([#4263](https://github.com/paperless-ngx/paperless-ngx/pull/4263)) +- Enhancement: settings reorganization \& improvements, separate admin section [@shamoon](https://github.com/shamoon) ([#4251](https://github.com/paperless-ngx/paperless-ngx/pull/4251)) +- Chore: Standardizes the imports across all the files and modules [@stumpylog](https://github.com/stumpylog) ([#4248](https://github.com/paperless-ngx/paperless-ngx/pull/4248)) +- Feature: consumption templates [@shamoon](https://github.com/shamoon) ([#4196](https://github.com/paperless-ngx/paperless-ngx/pull/4196)) +- Enhancement: support default permissions for object creation via frontend [@shamoon](https://github.com/shamoon) ([#4233](https://github.com/paperless-ngx/paperless-ngx/pull/4233)) +- Fix: Set a non-zero polling internal when inotify cannot import [@stumpylog](https://github.com/stumpylog) ([#4230](https://github.com/paperless-ngx/paperless-ngx/pull/4230)) +- Bump zone.js from 0.13.1 to 0.13.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#4223](https://github.com/paperless-ngx/paperless-ngx/pull/4223)) +- Bump [@types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot](https://github.com/types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot) ([#4224](https://github.com/paperless-ngx/paperless-ngx/pull/4224)) +- Bump the frontend-angular-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4222](https://github.com/paperless-ngx/paperless-ngx/pull/4222)) +- Bump bootstrap from 5.3.1 to 5.3.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4217](https://github.com/paperless-ngx/paperless-ngx/pull/4217)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4215](https://github.com/paperless-ngx/paperless-ngx/pull/4215)) +- Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4218](https://github.com/paperless-ngx/paperless-ngx/pull/4218)) +- Bump uuid from 9.0.0 to 9.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4216](https://github.com/paperless-ngx/paperless-ngx/pull/4216)) +- Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#4213](https://github.com/paperless-ngx/paperless-ngx/pull/4213)) +- Enhancement: bulk edit object permissions [@shamoon](https://github.com/shamoon) ([#4176](https://github.com/paperless-ngx/paperless-ngx/pull/4176)) +- Fix: completely hide upload widget if user does not have permissions [@nawramm](https://github.com/nawramm) ([#4198](https://github.com/paperless-ngx/paperless-ngx/pull/4198)) +- Fix: application of theme color vars at root [@shamoon](https://github.com/shamoon) ([#4193](https://github.com/paperless-ngx/paperless-ngx/pull/4193)) +- Enhancement: Allow the user the specifiy the export zip file name [@stumpylog](https://github.com/stumpylog) ([#4189](https://github.com/paperless-ngx/paperless-ngx/pull/4189)) +- Feature: Share links [@shamoon](https://github.com/shamoon) ([#3996](https://github.com/paperless-ngx/paperless-ngx/pull/3996)) +- Chore: change dark mode to use Bootstrap's color modes [@lkster](https://github.com/lkster) ([#4174](https://github.com/paperless-ngx/paperless-ngx/pull/4174)) +- Fix: support storage path placeholder via API [@shamoon](https://github.com/shamoon) ([#4179](https://github.com/paperless-ngx/paperless-ngx/pull/4179)) +- Fix: Logs the errors during thumbnail generation [@stumpylog](https://github.com/stumpylog) ([#4171](https://github.com/paperless-ngx/paperless-ngx/pull/4171)) +- Feature: New management command for fuzzy matching document content [@stumpylog](https://github.com/stumpylog) ([#4160](https://github.com/paperless-ngx/paperless-ngx/pull/4160)) +- Breaking: Drop support for Python 3.8 [@stumpylog](https://github.com/stumpylog) ([#4156](https://github.com/paperless-ngx/paperless-ngx/pull/4156)) +- Fix: dashboard widget card borders hidden by bkgd color [@shamoon](https://github.com/shamoon) ([#4155](https://github.com/paperless-ngx/paperless-ngx/pull/4155)) +- Enhancement: frontend better handle slow backend requests [@shamoon](https://github.com/shamoon) ([#4055](https://github.com/paperless-ngx/paperless-ngx/pull/4055)) +- Chore: Extend the live service utility for handling 503 errors [@stumpylog](https://github.com/stumpylog) ([#4143](https://github.com/paperless-ngx/paperless-ngx/pull/4143)) +- Chore: update docker image \& ci testing node to v18 [@shamoon](https://github.com/shamoon) ([#4149](https://github.com/paperless-ngx/paperless-ngx/pull/4149)) +- Fix: hide entire add user / group buttons if insufficient permissions [@shamoon](https://github.com/shamoon) ([#4133](https://github.com/paperless-ngx/paperless-ngx/pull/4133)) +- Enhancement: Improved error notifications [@shamoon](https://github.com/shamoon) ([#4062](https://github.com/paperless-ngx/paperless-ngx/pull/4062)) +- Feature: Official support for Python 3.11 [@stumpylog](https://github.com/stumpylog) ([#4146](https://github.com/paperless-ngx/paperless-ngx/pull/4146)) +- Chore: Unlock dependencies \& update them all [@stumpylog](https://github.com/stumpylog) ([#4142](https://github.com/paperless-ngx/paperless-ngx/pull/4142)) +- Change: PWA Manifest to Standalone Display [@swoga](https://github.com/swoga) ([#4129](https://github.com/paperless-ngx/paperless-ngx/pull/4129)) +- Enhancement: add --id-range for document_retagger [@kamilkosek](https://github.com/kamilkosek) ([#4080](https://github.com/paperless-ngx/paperless-ngx/pull/4080)) +- Enhancement: Add Afrikaans, Greek \& Norwegian languages [@shamoon](https://github.com/shamoon) ([#4088](https://github.com/paperless-ngx/paperless-ngx/pull/4088)) +- Enhancement: add task id to pre/post consume script as env [@andreheuer](https://github.com/andreheuer) ([#4037](https://github.com/paperless-ngx/paperless-ngx/pull/4037)) +- Enhancement: update bootstrap to v5.3.1 for backend static pages [@shamoon](https://github.com/shamoon) ([#4060](https://github.com/paperless-ngx/paperless-ngx/pull/4060)) +- Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4112](https://github.com/paperless-ngx/paperless-ngx/pull/4112)) +- Bump tslib from 2.6.1 to 2.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4108](https://github.com/paperless-ngx/paperless-ngx/pull/4108)) +- Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4106](https://github.com/paperless-ngx/paperless-ngx/pull/4106)) +- Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) +- Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) +- Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104)) +
+ ## paperless-ngx 1.17.4 ### Bug Fixes From e3f4e0b77572a9a784f748a79aa78c25388fb77c Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Wed, 29 Nov 2023 12:18:44 -0800 Subject: [PATCH 04/34] Adds new setting to control color conversions (#4709) --- docs/configuration.md | 14 ++++++++++++++ src/paperless/settings.py | 5 +++++ src/paperless_tesseract/parsers.py | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/docs/configuration.md b/docs/configuration.md index e952ec41b..c0e8022ac 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -704,6 +704,20 @@ but could result in missing text content. this value if you are certain your documents are not malicious and you need the text which was not OCRed +#### [`PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY=`](#PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY) {#PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY} + +: Controls the Ghostscript color conversion strategy when creating the archive file. This setting +will only be utilized if the output is a version of PDF/A. + + Valid options are CMYK, Gray, LeaveColorUnchanged, RGB or UseDeviceIndependentColor. + + You can find more on the settings [here](https://ghostscript.readthedocs.io/en/latest/VectorDevices.html#color-conversion-and-management) in the Ghostscript documentation. + + !!! warning + + Utilizing some of the options may result in errors when creating archive + files from PDFs. + #### [`PAPERLESS_OCR_USER_ARGS=`](#PAPERLESS_OCR_USER_ARGS) {#PAPERLESS_OCR_USER_ARGS} : OCRmyPDF offers many more options. Use this parameter to specify any diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 86f1f569f..9daeb8a47 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -864,6 +864,11 @@ OCR_MAX_IMAGE_PIXELS: Optional[int] = None if os.environ.get("PAPERLESS_OCR_MAX_IMAGE_PIXELS") is not None: OCR_MAX_IMAGE_PIXELS: int = int(os.environ.get("PAPERLESS_OCR_MAX_IMAGE_PIXELS")) +OCR_COLOR_CONVERSION_STRATEGY = os.getenv( + "PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY", + "RGB", +) + OCR_USER_ARGS = os.getenv("PAPERLESS_OCR_USER_ARGS", "{}") # GNUPG needs a home directory for some reason diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index 3523da7bd..babcf6bcf 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -186,6 +186,11 @@ class RasterisedDocumentParser(DocumentParser): "progress_bar": False, } + if "pdfa" in ocrmypdf_args["output_type"]: + ocrmypdf_args[ + "color_conversion_strategy" + ] = settings.OCR_COLOR_CONVERSION_STRATEGY + if settings.OCR_MODE == "force" or safe_fallback: ocrmypdf_args["force_ocr"] = True elif settings.OCR_MODE in ["skip", "skip_noarchive"]: From 6575c69409afeb68f70fd602832e15c9d0701bc2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Wed, 29 Nov 2023 21:56:05 -0800 Subject: [PATCH 05/34] Fix: restore docs search --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 55cd3ca94..816ba932c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -67,4 +67,5 @@ extra: - icon: material/chat link: https://matrix.to/#/#paperless:matrix.org plugins: + - search - glightbox From 64cfc43891fbc7da692c138e73922d45b2e12c8c Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:00:54 -0800 Subject: [PATCH 06/34] Inreases the length to 5, allowing for commas as well as values (#4719) --- .../1041_alter_consumptiontemplate_sources.py | 22 +++++++++++++++++++ src/documents/models.py | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/documents/migrations/1041_alter_consumptiontemplate_sources.py diff --git a/src/documents/migrations/1041_alter_consumptiontemplate_sources.py b/src/documents/migrations/1041_alter_consumptiontemplate_sources.py new file mode 100644 index 000000000..c96dc53cf --- /dev/null +++ b/src/documents/migrations/1041_alter_consumptiontemplate_sources.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.7 on 2023-11-30 14:29 + +import multiselectfield.db.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "1040_customfield_customfieldinstance_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="consumptiontemplate", + name="sources", + field=multiselectfield.db.fields.MultiSelectField( + choices=[(1, "Consume Folder"), (2, "Api Upload"), (3, "Mail Fetch")], + default="1,2,3", + max_length=5, + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index 04a3230e6..c3eea0ac9 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -754,7 +754,7 @@ class ConsumptionTemplate(models.Model): order = models.IntegerField(_("order"), default=0) sources = MultiSelectField( - max_length=3, + max_length=5, choices=DocumentSourceChoices.choices, default=f"{DocumentSource.ConsumeFolder},{DocumentSource.ApiUpload},{DocumentSource.MailFetch}", ) From 33c2398de949dd4ee97b08736e5964efab2fcc01 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Bot [bot]" <99855517+paperlessngx-bot@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:08:10 -0800 Subject: [PATCH 07/34] New Crowdin updates (#4695) --- src-ui/src/locale/messages.de_DE.xlf | 2 +- src/locale/ru_RU/LC_MESSAGES/django.po | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 01dcf75cf..264629003 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -3019,7 +3019,7 @@ src/app/components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component.ts 39 - Neues benutzerdefinidertes Feld erstellen + Neues benutzerdefiniertes Feld erstellen Edit custom field diff --git a/src/locale/ru_RU/LC_MESSAGES/django.po b/src/locale/ru_RU/LC_MESSAGES/django.po index 4cd8ddf0c..9409df01d 100644 --- a/src/locale/ru_RU/LC_MESSAGES/django.po +++ b/src/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-10 09:02-0800\n" -"PO-Revision-Date: 2023-11-13 01:31\n" +"PO-Revision-Date: 2023-11-29 08:50\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -409,7 +409,7 @@ msgstr "" #: documents/models.py:454 msgid "owner is" -msgstr "" +msgstr "владелец" #: documents/models.py:455 msgid "has owner in" @@ -417,7 +417,7 @@ msgstr "" #: documents/models.py:456 msgid "does not have owner" -msgstr "" +msgstr "не имеет владельца" #: documents/models.py:457 msgid "does not have owner in" @@ -521,7 +521,7 @@ msgstr "пользователь" #: documents/models.py:679 msgid "note" -msgstr "" +msgstr "заметка" #: documents/models.py:680 msgid "notes" @@ -529,15 +529,15 @@ msgstr "заметки" #: documents/models.py:688 msgid "Archive" -msgstr "" +msgstr "Архив" #: documents/models.py:689 msgid "Original" -msgstr "" +msgstr "Оригинал" #: documents/models.py:700 msgid "expiration" -msgstr "" +msgstr "Срок действия" #: documents/models.py:707 msgid "slug" @@ -645,7 +645,7 @@ msgstr "" #: documents/models.py:887 msgid "URL" -msgstr "" +msgstr "Ссылка" #: documents/models.py:888 msgid "Date" @@ -661,7 +661,7 @@ msgstr "" #: documents/models.py:891 msgid "Float" -msgstr "" +msgstr "С плавающей точкой" #: documents/models.py:892 msgid "Monetary" @@ -669,15 +669,15 @@ msgstr "" #: documents/models.py:904 msgid "data type" -msgstr "" +msgstr "Тип данных" #: documents/models.py:912 msgid "custom field" -msgstr "" +msgstr "Пользовательское поле" #: documents/models.py:913 msgid "custom fields" -msgstr "" +msgstr "Пользовательские поля" #: documents/models.py:973 msgid "custom field instance" From 65f6b0881ea2dce37a9c8b8ee079278e4fd81865 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:11:00 -0800 Subject: [PATCH 08/34] Bumps version to 2.0.1 --- src-ui/src/environments/environment.prod.ts | 2 +- src/paperless/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index f0cc500c7..3cbf8b6dc 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + 'api/', apiVersion: '3', appTitle: 'Paperless-ngx', - version: '2.0.0-dev', + version: '2.0.1', webSocketHost: window.location.host, webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketBaseUrl: base_url.pathname + 'ws/', diff --git a/src/paperless/version.py b/src/paperless/version.py index 8880959b6..209e0d25a 100644 --- a/src/paperless/version.py +++ b/src/paperless/version.py @@ -1,6 +1,6 @@ from typing import Final -__version__: Final[tuple[int, int, int]] = (2, 0, 0) +__version__: Final[tuple[int, int, int]] = (2, 0, 1) # Version string like X.Y.Z __full_version_str__: Final[str] = ".".join(map(str, __version__)) # Version string like X.Y From 69be86e16c956e2129baef318e76a5f4cadf8b7a Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Thu, 30 Nov 2023 07:11:46 -0800 Subject: [PATCH 09/34] Resets version string to 2.0.1-dev --- src-ui/src/environments/environment.prod.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-ui/src/environments/environment.prod.ts b/src-ui/src/environments/environment.prod.ts index 3cbf8b6dc..93603f0d1 100644 --- a/src-ui/src/environments/environment.prod.ts +++ b/src-ui/src/environments/environment.prod.ts @@ -5,7 +5,7 @@ export const environment = { apiBaseUrl: document.baseURI + 'api/', apiVersion: '3', appTitle: 'Paperless-ngx', - version: '2.0.1', + version: '2.0.1-dev', webSocketHost: window.location.host, webSocketProtocol: window.location.protocol == 'https:' ? 'wss:' : 'ws:', webSocketBaseUrl: base_url.pathname + 'ws/', From 27155cb7e3230a6909ff9b339e41bf423fb08e64 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 30 Nov 2023 17:12:14 -0800 Subject: [PATCH 10/34] Fixes the image cleaner not running for the registry cache (#4732) --- .github/workflows/cleanup-tags.yml | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cleanup-tags.yml b/.github/workflows/cleanup-tags.yml index 63eb5bf2c..e73ec62f3 100644 --- a/.github/workflows/cleanup-tags.yml +++ b/.github/workflows/cleanup-tags.yml @@ -19,9 +19,13 @@ concurrency: jobs: cleanup-images: - name: Cleanup Image Tags for paperless-ngx + name: Cleanup Image Tags for ${{ matrix.primary-name }} if: github.repository_owner == 'paperless-ngx' runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + primary-name: ["paperless-ngx", "paperless-ngx/builder/cache/app"] env: # Requires a personal access token with the OAuth scope delete:packages TOKEN: ${{ secrets.GHA_CONTAINER_DELETE_TOKEN }} @@ -34,7 +38,7 @@ jobs: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" is_org: "true" - package_name: "paperless-ngx" + package_name: "${{ matrix.primary-name }}" scheme: "branch" repo_name: "paperless-ngx" match_regex: "feature-" @@ -49,18 +53,7 @@ jobs: strategy: fail-fast: false matrix: - include: - - primary-name: "paperless-ngx" - - primary-name: "paperless-ngx/builder/cache/app" - # TODO: Remove the above and replace with the below - # - primary-name: "builder/qpdf" - # - primary-name: "builder/cache/qpdf" - # - primary-name: "builder/pikepdf" - # - primary-name: "builder/cache/pikepdf" - # - primary-name: "builder/jbig2enc" - # - primary-name: "builder/cache/jbig2enc" - # - primary-name: "builder/psycopg2" - # - primary-name: "builder/cache/psycopg2" + primary-name: ["paperless-ngx", "paperless-ngx/builder/cache/app"] env: # Requires a personal access token with the OAuth scope delete:packages TOKEN: ${{ secrets.GHA_CONTAINER_DELETE_TOKEN }} From 133d43ae3057bceb56cbedaf96742ce62c0d7930 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 30 Nov 2023 19:08:03 -0800 Subject: [PATCH 11/34] Enhancement: auto-refresh logs & tasks (#4680) --- src-ui/messages.xlf | 72 +++++++++---------- .../components/admin/logs/logs.component.html | 13 ++-- .../admin/logs/logs.component.spec.ts | 20 +++++- .../components/admin/logs/logs.component.ts | 14 ++++ .../admin/tasks/tasks.component.html | 15 ++-- .../admin/tasks/tasks.component.spec.ts | 18 ++++- .../components/admin/tasks/tasks.component.ts | 14 ++++ 7 files changed, 113 insertions(+), 53 deletions(-) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 870f7c696..f80457c42 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -410,15 +410,26 @@ 228 + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -426,11 +437,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -995,7 +1002,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1131,7 +1138,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1462,18 +1469,11 @@ 22 - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1496,130 +1496,130 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 diff --git a/src-ui/src/app/components/admin/logs/logs.component.html b/src-ui/src/app/components/admin/logs/logs.component.html index 91f7f3bd6..628886c62 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.html +++ b/src-ui/src/app/components/admin/logs/logs.component.html @@ -1,14 +1,19 @@ - +
+ + +
diff --git a/src-ui/src/app/components/admin/logs/logs.component.spec.ts b/src-ui/src/app/components/admin/logs/logs.component.spec.ts index a9c4b4613..690bbcdde 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.spec.ts +++ b/src-ui/src/app/components/admin/logs/logs.component.spec.ts @@ -1,4 +1,9 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing' +import { + ComponentFixture, + TestBed, + fakeAsync, + tick, +} from '@angular/core/testing' import { LogService } from 'src/app/services/rest/log.service' import { PageHeaderComponent } from '../../common/page-header/page-header.component' import { LogsComponent } from './logs.component' @@ -26,6 +31,7 @@ describe('LogsComponent', () => { let fixture: ComponentFixture let logService: LogService let logSpy + let reloadSpy beforeEach(async () => { TestBed.configureTestingModule({ @@ -42,7 +48,9 @@ describe('LogsComponent', () => { }) fixture = TestBed.createComponent(LogsComponent) component = fixture.componentInstance + reloadSpy = jest.spyOn(component, 'reloadLogs') window.HTMLElement.prototype.scroll = function () {} // mock scroll + jest.useFakeTimers() fixture.detectChanges() }) @@ -68,4 +76,14 @@ describe('LogsComponent', () => { component.reloadLogs() expect(component.logs).toHaveLength(0) }) + + it('should auto refresh, allow toggle', () => { + jest.advanceTimersByTime(6000) + expect(reloadSpy).toHaveBeenCalledTimes(2) + + component.toggleAutoRefresh() + expect(component.autoRefreshInterval).toBeNull() + jest.advanceTimersByTime(6000) + expect(reloadSpy).toHaveBeenCalledTimes(2) + }) }) diff --git a/src-ui/src/app/components/admin/logs/logs.component.ts b/src-ui/src/app/components/admin/logs/logs.component.ts index cf88077e7..2ca259218 100644 --- a/src-ui/src/app/components/admin/logs/logs.component.ts +++ b/src-ui/src/app/components/admin/logs/logs.component.ts @@ -27,6 +27,8 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy { public isLoading: boolean = false + public autoRefreshInterval: any + @ViewChild('logContainer') logContainer: ElementRef ngOnInit(): void { @@ -41,6 +43,7 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy { this.activeLog = this.logFiles[0] this.reloadLogs() } + this.toggleAutoRefresh() }) } @@ -91,4 +94,15 @@ export class LogsComponent implements OnInit, AfterViewChecked, OnDestroy { behavior: 'auto', }) } + + toggleAutoRefresh(): void { + if (this.autoRefreshInterval) { + clearInterval(this.autoRefreshInterval) + this.autoRefreshInterval = null + } else { + this.autoRefreshInterval = setInterval(() => { + this.reloadLogs() + }, 5000) + } + } } diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html index 62799c9f6..7e0ac4cae 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.html +++ b/src-ui/src/app/components/admin/tasks/tasks.component.html @@ -1,5 +1,5 @@ -
+
- +
+ + +
diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts index c981dac6f..b86a170b7 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts @@ -112,6 +112,7 @@ describe('TasksComponent', () => { let modalService: NgbModal let router: Router let httpTestingController: HttpTestingController + let reloadSpy beforeEach(async () => { TestBed.configureTestingModule({ @@ -141,11 +142,13 @@ describe('TasksComponent', () => { }).compileComponents() tasksService = TestBed.inject(TasksService) + reloadSpy = jest.spyOn(tasksService, 'reload') httpTestingController = TestBed.inject(HttpTestingController) modalService = TestBed.inject(NgbModal) router = TestBed.inject(Router) fixture = TestBed.createComponent(TasksComponent) component = fixture.componentInstance + jest.useFakeTimers() fixture.detectChanges() httpTestingController .expectOne(`${environment.apiBaseUrl}tasks/`) @@ -164,7 +167,7 @@ describe('TasksComponent', () => { `Failed${currentTasksLength}` ) expect( - fixture.debugElement.queryAll(By.css('input[type="checkbox"]')) + fixture.debugElement.queryAll(By.css('table input[type="checkbox"]')) ).toHaveLength(currentTasksLength + 1) currentTasksLength = tasks.filter( @@ -245,7 +248,7 @@ describe('TasksComponent', () => { it('should support toggle all tasks', () => { const toggleCheck = fixture.debugElement.query( - By.css('input[type=checkbox]') + By.css('table input[type=checkbox]') ) toggleCheck.nativeElement.dispatchEvent(new MouseEvent('click')) fixture.detectChanges() @@ -269,4 +272,15 @@ describe('TasksComponent', () => { tasks[3].related_document, ]) }) + + it('should auto refresh, allow toggle', () => { + expect(reloadSpy).toHaveBeenCalledTimes(1) + jest.advanceTimersByTime(5000) + expect(reloadSpy).toHaveBeenCalledTimes(2) + + component.toggleAutoRefresh() + expect(component.autoRefreshInterval).toBeNull() + jest.advanceTimersByTime(6000) + expect(reloadSpy).toHaveBeenCalledTimes(2) + }) }) diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.ts b/src-ui/src/app/components/admin/tasks/tasks.component.ts index 32cf6800f..5a1949e77 100644 --- a/src-ui/src/app/components/admin/tasks/tasks.component.ts +++ b/src-ui/src/app/components/admin/tasks/tasks.component.ts @@ -23,6 +23,8 @@ export class TasksComponent public pageSize: number = 25 public page: number = 1 + public autoRefreshInterval: any + get dismissButtonText(): string { return this.selectedTasks.size > 0 ? $localize`Dismiss selected` @@ -39,6 +41,7 @@ export class TasksComponent ngOnInit() { this.tasksService.reload() + this.toggleAutoRefresh() } ngOnDestroy() { @@ -135,4 +138,15 @@ export class TasksComponent return $localize`failed` } } + + toggleAutoRefresh(): void { + if (this.autoRefreshInterval) { + clearInterval(this.autoRefreshInterval) + this.autoRefreshInterval = null + } else { + this.autoRefreshInterval = setInterval(() => { + this.tasksService.reload() + }, 5000) + } + } } From 46d216b02f35abb5fdbed0539984b8d262192e01 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 30 Nov 2023 23:14:59 -0800 Subject: [PATCH 12/34] Remove project actions in favor of GH workflows --- .github/workflows/project-actions.yml | 30 --------------------------- 1 file changed, 30 deletions(-) diff --git a/.github/workflows/project-actions.yml b/.github/workflows/project-actions.yml index 6fa849652..16ef05de1 100644 --- a/.github/workflows/project-actions.yml +++ b/.github/workflows/project-actions.yml @@ -1,10 +1,6 @@ name: Project Automations on: - issues: - types: - - opened - - reopened pull_request_target: #_target allows access to secrets types: - opened @@ -16,25 +12,7 @@ on: permissions: contents: read -env: - todo: Todo - done: Done - in_progress: In Progress - jobs: - issue_opened_or_reopened: - name: issue_opened_or_reopened - runs-on: ubuntu-22.04 - if: github.event_name == 'issues' && (github.event.action == 'opened' || github.event.action == 'reopened') - steps: - - name: Add issue to project and set status to ${{ env.todo }} - uses: leonsteinhaeuser/project-beta-automations@v2.2.1 - with: - gh_token: ${{ secrets.GH_TOKEN }} - organization: paperless-ngx - project_id: 2 - resource_node_id: ${{ github.event.issue.node_id }} - status_value: ${{ env.todo }} # Target status pr_opened_or_reopened: name: pr_opened_or_reopened runs-on: ubuntu-22.04 @@ -43,14 +21,6 @@ jobs: pull-requests: write if: github.event_name == 'pull_request_target' && (github.event.action == 'opened' || github.event.action == 'reopened') && github.event.pull_request.user.login != 'dependabot' steps: - - name: Add PR to project and set status to "Needs Review" - uses: leonsteinhaeuser/project-beta-automations@v2.2.1 - with: - gh_token: ${{ secrets.GH_TOKEN }} - organization: paperless-ngx - project_id: 2 - resource_node_id: ${{ github.event.pull_request.node_id }} - status_value: "Needs Review" # Target status - name: Label PR with release-drafter uses: release-drafter/release-drafter@v5 env: From ce643942ea4f2635a13c22e34a933b254647d560 Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:55:03 +0100 Subject: [PATCH 13/34] Documentation: Fix typos (#4737) --- docs/administration.md | 6 +++--- docs/advanced_usage.md | 4 ++-- docs/development.md | 2 +- docs/faq.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/administration.md b/docs/administration.md index c5659a94c..808d6afaf 100644 --- a/docs/administration.md +++ b/docs/administration.md @@ -34,7 +34,7 @@ Options available to docker installations: Paperless uses 4 volumes: - `paperless_media`: This is where your documents are stored. - - `paperless_data`: This is where auxillary data is stored. This + - `paperless_data`: This is where auxiliary data is stored. This folder also contains the SQLite database, if you use it. - `paperless_pgdata`: Exists only if you use PostgreSQL and contains the database. @@ -408,7 +408,7 @@ that don't match a document anymore get removed as well. ### Managing the Automatic matching algorithm The _Auto_ matching algorithm requires a trained neural network to work. -This network needs to be updated whenever somethings in your data +This network needs to be updated whenever something in your data changes. The docker image takes care of that automatically with the task scheduler. You can manually renew the classifier by invoking the following management command: @@ -597,7 +597,7 @@ This tool does a fuzzy match over document content, looking for those which look close according to a given ratio. At this time, other metadata (such as correspondent or type) is not -take into account by the detection. +taken into account by the detection. ``` document_fuzzy_match [--ratio] [--processes N] diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index ac8c1549d..ca5ed4321 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -510,7 +510,7 @@ existing tables) with: ## Barcodes {#barcodes} -Paperless is able to utilize barcodes for automatically preforming some tasks. +Paperless is able to utilize barcodes for automatically performing some tasks. At this time, the library utilized for detection of barcodes supports the following types: @@ -566,7 +566,7 @@ collating two separate scans into one document, reordering the pages as necessar Suppose you have a double-sided document with 6 pages (3 sheets of paper). First, put the stack into your ADF as normal, ensuring that page 1 is scanned first. Your ADF -will now scan pages 1, 3, and 5. Then you (or your the scanner, if it supports it) upload +will now scan pages 1, 3, and 5. Then you (or your scanner, if it supports it) upload the scan into the correct sub-directory of the consume folder (`double-sided` by default; keep in mind that Paperless will _not_ automatically create the directory for you.) Paperless will then process the scan and move it into an internal staging area. diff --git a/docs/development.md b/docs/development.md index e4eb36d94..16933a172 100644 --- a/docs/development.md +++ b/docs/development.md @@ -9,7 +9,7 @@ following way: - `main` always represents the latest release and will only see changes when a new release is made. - `dev` contains the code that will be in the next release. -- `feature-X` contain bigger changes that will be in some release, but +- `feature-X` contains bigger changes that will be in some release, but not necessarily the next one. When making functional changes to Paperless-ngx, _always_ make your changes diff --git a/docs/faq.md b/docs/faq.md index 9dff29dac..5d59e29ad 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -87,7 +87,7 @@ follow the [Docker Compose instructions](https://docs.paperless-ngx.com/setup/#i space compared to a bare metal installation, docker comes with close to zero overhead, even on Raspberry Pi. -If you decide to got with the bare metal route, be aware that some of +If you decide to go with the bare metal route, be aware that some of the python requirements do not have precompiled packages for ARM / ARM64. Installation of these will require additional development libraries and compilation will take a long time. From 4493236879bcc70aa3e4b6be769a543d9ada239d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 16:28:50 -0800 Subject: [PATCH 14/34] Bump @types/node from 20.8.10 to 20.10.2 in /src-ui (#4748) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.8.10 to 20.10.2. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src-ui/package-lock.json | 8 ++++---- src-ui/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 13f060d60..1cfbd9250 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -47,7 +47,7 @@ "@angular/compiler-cli": "~16.2.3", "@playwright/test": "^1.39.0", "@types/jest": "^29.5.7", - "@types/node": "^20.8.10", + "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", "concurrently": "^8.2.2", @@ -5585,9 +5585,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "version": "20.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.2.tgz", + "integrity": "sha512-37MXfxkb0vuIlRKHNxwCkb60PNBpR94u4efQuN4JgIAm66zfCDXGSAFCef9XUWFovX2R1ok6Z7MHhtdVXXkkIw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" diff --git a/src-ui/package.json b/src-ui/package.json index 39e71d033..d6441599e 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -49,7 +49,7 @@ "@angular/compiler-cli": "~16.2.3", "@playwright/test": "^1.39.0", "@types/jest": "^29.5.7", - "@types/node": "^20.8.10", + "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", "concurrently": "^8.2.2", From 64651d5a8424488ad4878bb61098376c550d892e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Dec 2023 00:38:35 +0000 Subject: [PATCH 15/34] Bump wait-on from 7.0.1 to 7.2.0 in /src-ui (#4747) Bumps [wait-on](https://github.com/jeffbski/wait-on) from 7.0.1 to 7.2.0. - [Release notes](https://github.com/jeffbski/wait-on/releases) - [Commits](https://github.com/jeffbski/wait-on/compare/v7.0.1...v7.2.0) --- updated-dependencies: - dependency-name: wait-on dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src-ui/package-lock.json | 38 ++++++++++++++------------------------ src-ui/package.json | 2 +- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 1cfbd9250..0abf09262 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -59,7 +59,7 @@ "patch-package": "^8.0.0", "ts-node": "~10.9.1", "typescript": "^5.1.6", - "wait-on": "^7.0.1" + "wait-on": "^7.2.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -7083,9 +7083,9 @@ } }, "node_modules/axios": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", - "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -13133,9 +13133,9 @@ } }, "node_modules/joi": { - "version": "17.9.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz", - "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==", + "version": "17.11.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", + "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", @@ -18050,16 +18050,16 @@ } }, "node_modules/wait-on": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz", - "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", + "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", "dev": true, "dependencies": { - "axios": "^0.27.2", - "joi": "^17.7.0", + "axios": "^1.6.1", + "joi": "^17.11.0", "lodash": "^4.17.21", - "minimist": "^1.2.7", - "rxjs": "^7.8.0" + "minimist": "^1.2.8", + "rxjs": "^7.8.1" }, "bin": { "wait-on": "bin/wait-on" @@ -18068,16 +18068,6 @@ "node": ">=12.0.0" } }, - "node_modules/wait-on/node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", diff --git a/src-ui/package.json b/src-ui/package.json index d6441599e..e4b9a65ca 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -61,6 +61,6 @@ "patch-package": "^8.0.0", "ts-node": "~10.9.1", "typescript": "^5.1.6", - "wait-on": "^7.0.1" + "wait-on": "^7.2.0" } } From 9c5caecafadc6f28e414117ba7be329243863608 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Dec 2023 00:49:46 +0000 Subject: [PATCH 16/34] Bump @playwright/test from 1.39.0 to 1.40.1 in /src-ui (#4749) Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.39.0 to 1.40.1. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.39.0...v1.40.1) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src-ui/package-lock.json | 24 ++++++++++++------------ src-ui/package.json | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 0abf09262..0e9e5771b 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -45,7 +45,7 @@ "@angular-eslint/template-parser": "16.2.0", "@angular/cli": "~16.2.9", "@angular/compiler-cli": "~16.2.3", - "@playwright/test": "^1.39.0", + "@playwright/test": "^1.40.1", "@types/jest": "^29.5.7", "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", @@ -5189,12 +5189,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz", - "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==", + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", + "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", "dev": true, "dependencies": { - "playwright": "1.39.0" + "playwright": "1.40.1" }, "bin": { "playwright": "cli.js" @@ -15535,12 +15535,12 @@ } }, "node_modules/playwright": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", - "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", + "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", "dev": true, "dependencies": { - "playwright-core": "1.39.0" + "playwright-core": "1.40.1" }, "bin": { "playwright": "cli.js" @@ -15553,9 +15553,9 @@ } }, "node_modules/playwright-core": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", - "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", + "version": "1.40.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", + "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", "dev": true, "bin": { "playwright-core": "cli.js" diff --git a/src-ui/package.json b/src-ui/package.json index e4b9a65ca..81cdee813 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -47,7 +47,7 @@ "@angular-eslint/template-parser": "16.2.0", "@angular/cli": "~16.2.9", "@angular/compiler-cli": "~16.2.3", - "@playwright/test": "^1.39.0", + "@playwright/test": "^1.40.1", "@types/jest": "^29.5.7", "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", From d2c33c00746ecc4ceba35a1ce5339354fdbf20ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Dec 2023 00:58:27 +0000 Subject: [PATCH 17/34] Bump the frontend-jest-dependencies group in /src-ui with 2 updates (#4744) Bumps the frontend-jest-dependencies group in /src-ui with 2 updates: [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) and [jest-preset-angular](https://github.com/thymikee/jest-preset-angular). Updates `@types/jest` from 29.5.7 to 29.5.10 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) Updates `jest-preset-angular` from 13.1.2 to 13.1.4 - [Release notes](https://github.com/thymikee/jest-preset-angular/releases) - [Changelog](https://github.com/thymikee/jest-preset-angular/blob/main/CHANGELOG.md) - [Commits](https://github.com/thymikee/jest-preset-angular/compare/v13.1.2...v13.1.4) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:development update-type: version-update:semver-patch dependency-group: frontend-jest-dependencies - dependency-name: jest-preset-angular dependency-type: direct:development update-type: version-update:semver-patch dependency-group: frontend-jest-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src-ui/package-lock.json | 24 ++++++++++++------------ src-ui/package.json | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 0e9e5771b..6257dd794 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -46,7 +46,7 @@ "@angular/cli": "~16.2.9", "@angular/compiler-cli": "~16.2.3", "@playwright/test": "^1.40.1", - "@types/jest": "^29.5.7", + "@types/jest": "^29.5.10", "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", @@ -54,7 +54,7 @@ "eslint": "^8.52.0", "jest": "29.7.0", "jest-environment-jsdom": "^29.7.0", - "jest-preset-angular": "^13.1.1", + "jest-preset-angular": "^13.1.4", "jest-websocket-mock": "^2.5.0", "patch-package": "^8.0.0", "ts-node": "~10.9.1", @@ -5552,9 +5552,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.7", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.7.tgz", - "integrity": "sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==", + "version": "29.5.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", + "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -12315,9 +12315,9 @@ } }, "node_modules/jest-preset-angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.2.tgz", - "integrity": "sha512-kuzuIch/YYTMaMnuGDaiZEu++Bjc5WskOAmMwqWO0Grpcd0SulqTOV70Gz6Q/ZOQuMye+LS4KPyIVfqnJr2e3g==", + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-13.1.4.tgz", + "integrity": "sha512-XKeWa8Qt7p37SzlJ85qEXgig06SgkfrzV057X2GSMqfz/HLJmTUjMFkHJKe65ZaQumNQWCcXpxXREr6EfZ9bow==", "dev": true, "dependencies": { "bs-logger": "^0.2.6", @@ -12334,10 +12334,10 @@ "esbuild": ">=0.13.8" }, "peerDependencies": { - "@angular-devkit/build-angular": ">=13.0.0 <17.0.0", - "@angular/compiler-cli": ">=13.0.0 <17.0.0", - "@angular/core": ">=13.0.0 <17.0.0", - "@angular/platform-browser-dynamic": ">=13.0.0 <17.0.0", + "@angular-devkit/build-angular": ">=13.0.0 <18.0.0", + "@angular/compiler-cli": ">=13.0.0 <18.0.0", + "@angular/core": ">=13.0.0 <18.0.0", + "@angular/platform-browser-dynamic": ">=13.0.0 <18.0.0", "jest": "^29.0.0", "typescript": ">=4.4" } diff --git a/src-ui/package.json b/src-ui/package.json index 81cdee813..374c234c7 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -48,7 +48,7 @@ "@angular/cli": "~16.2.9", "@angular/compiler-cli": "~16.2.3", "@playwright/test": "^1.40.1", - "@types/jest": "^29.5.7", + "@types/jest": "^29.5.10", "@types/node": "^20.10.2", "@typescript-eslint/eslint-plugin": "^6.9.1", "@typescript-eslint/parser": "^6.9.1", @@ -56,7 +56,7 @@ "eslint": "^8.52.0", "jest": "29.7.0", "jest-environment-jsdom": "^29.7.0", - "jest-preset-angular": "^13.1.1", + "jest-preset-angular": "^13.1.4", "jest-websocket-mock": "^2.5.0", "patch-package": "^8.0.0", "ts-node": "~10.9.1", From e3496d04858337a193b623fabc8cc49ec0dc08cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Dec 2023 01:07:13 +0000 Subject: [PATCH 18/34] Bump the frontend-eslint-dependencies group in /src-ui with 3 updates (#4756) Bumps the frontend-eslint-dependencies group in /src-ui with 3 updates: [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin), [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) and [eslint](https://github.com/eslint/eslint). Updates `@typescript-eslint/eslint-plugin` from 6.9.1 to 6.13.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.13.1/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 6.9.1 to 6.13.1 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v6.13.1/packages/parser) Updates `eslint` from 8.52.0 to 8.55.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.52.0...v8.55.0) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: frontend-eslint-dependencies - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: frontend-eslint-dependencies - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor dependency-group: frontend-eslint-dependencies ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src-ui/package-lock.json | 118 +++++++++++++++++++-------------------- src-ui/package.json | 6 +- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 6257dd794..cf0882708 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -48,10 +48,10 @@ "@playwright/test": "^1.40.1", "@types/jest": "^29.5.10", "@types/node": "^20.10.2", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", "concurrently": "^8.2.2", - "eslint": "^8.52.0", + "eslint": "^8.55.0", "jest": "29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-preset-angular": "^13.1.4", @@ -3698,9 +3698,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -3743,9 +3743,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3788,9 +3788,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5702,16 +5702,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", - "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.1.tgz", + "integrity": "sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/type-utils": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/type-utils": "6.13.1", + "@typescript-eslint/utils": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -5737,13 +5737,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", - "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.1.tgz", + "integrity": "sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/utils": "6.9.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/utils": "6.13.1", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -5797,15 +5797,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.1.tgz", + "integrity": "sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4" }, "engines": { @@ -5825,13 +5825,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.1.tgz", + "integrity": "sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5991,9 +5991,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.1.tgz", + "integrity": "sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6004,13 +6004,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.1.tgz", + "integrity": "sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/visitor-keys": "6.13.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6064,17 +6064,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", - "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.1.tgz", + "integrity": "sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", + "@typescript-eslint/scope-manager": "6.13.1", + "@typescript-eslint/types": "6.13.1", + "@typescript-eslint/typescript-estree": "6.13.1", "semver": "^7.5.4" }, "engines": { @@ -6122,12 +6122,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.1.tgz", + "integrity": "sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.9.1", + "@typescript-eslint/types": "6.13.1", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -9180,15 +9180,15 @@ } }, "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", diff --git a/src-ui/package.json b/src-ui/package.json index 374c234c7..7f0720388 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -50,10 +50,10 @@ "@playwright/test": "^1.40.1", "@types/jest": "^29.5.10", "@types/node": "^20.10.2", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", + "@typescript-eslint/eslint-plugin": "^6.13.1", + "@typescript-eslint/parser": "^6.13.1", "concurrently": "^8.2.2", - "eslint": "^8.52.0", + "eslint": "^8.55.0", "jest": "29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-preset-angular": "^13.1.4", From 7cfa05d7f2c63d2a1c25eb4e0b54ad3a52726a59 Mon Sep 17 00:00:00 2001 From: "Paperless-ngx Bot [bot]" <99855517+paperlessngx-bot@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:44:05 -0800 Subject: [PATCH 19/34] New Crowdin updates (#4729) --- src-ui/src/locale/messages.af_ZA.xlf | 74 ++++---- src-ui/src/locale/messages.ar_AR.xlf | 74 ++++---- src-ui/src/locale/messages.be_BY.xlf | 74 ++++---- src-ui/src/locale/messages.bg_BG.xlf | 74 ++++---- src-ui/src/locale/messages.ca_ES.xlf | 74 ++++---- src-ui/src/locale/messages.cs_CZ.xlf | 74 ++++---- src-ui/src/locale/messages.da_DK.xlf | 74 ++++---- src-ui/src/locale/messages.de_DE.xlf | 74 ++++---- src-ui/src/locale/messages.el_GR.xlf | 74 ++++---- src-ui/src/locale/messages.es_ES.xlf | 74 ++++---- src-ui/src/locale/messages.fi_FI.xlf | 74 ++++---- src-ui/src/locale/messages.fr_FR.xlf | 102 +++++------ src-ui/src/locale/messages.he_IL.xlf | 74 ++++---- src-ui/src/locale/messages.hr_HR.xlf | 74 ++++---- src-ui/src/locale/messages.hu_HU.xlf | 92 +++++----- src-ui/src/locale/messages.id_ID.xlf | 74 ++++---- src-ui/src/locale/messages.it_IT.xlf | 74 ++++---- src-ui/src/locale/messages.ko_KR.xlf | 74 ++++---- src-ui/src/locale/messages.lb_LU.xlf | 74 ++++---- src-ui/src/locale/messages.lv_LV.xlf | 74 ++++---- src-ui/src/locale/messages.nl_NL.xlf | 244 ++++++++++++------------- src-ui/src/locale/messages.no_NO.xlf | 74 ++++---- src-ui/src/locale/messages.pl_PL.xlf | 74 ++++---- src-ui/src/locale/messages.pt_BR.xlf | 74 ++++---- src-ui/src/locale/messages.pt_PT.xlf | 74 ++++---- src-ui/src/locale/messages.ro_RO.xlf | 74 ++++---- src-ui/src/locale/messages.ru_RU.xlf | 74 ++++---- src-ui/src/locale/messages.sk_SK.xlf | 74 ++++---- src-ui/src/locale/messages.sl_SI.xlf | 74 ++++---- src-ui/src/locale/messages.sr_CS.xlf | 74 ++++---- src-ui/src/locale/messages.sv_SE.xlf | 74 ++++---- src-ui/src/locale/messages.th_TH.xlf | 74 ++++---- src-ui/src/locale/messages.tr_TR.xlf | 74 ++++---- src-ui/src/locale/messages.uk_UA.xlf | 74 ++++---- src-ui/src/locale/messages.vi_VN.xlf | 78 ++++---- src-ui/src/locale/messages.zh_CN.xlf | 74 ++++---- src-ui/src/locale/messages.zh_TW.xlf | 74 ++++---- src/locale/el_GR/LC_MESSAGES/django.po | 104 +++++------ src/locale/hu_HU/LC_MESSAGES/django.po | 26 +-- src/locale/pl_PL/LC_MESSAGES/django.po | 20 +- 40 files changed, 1554 insertions(+), 1554 deletions(-) diff --git a/src-ui/src/locale/messages.af_ZA.xlf b/src-ui/src/locale/messages.af_ZA.xlf index 4c3760907..5d0e3a806 100644 --- a/src-ui/src/locale/messages.af_ZA.xlf +++ b/src-ui/src/locale/messages.af_ZA.xlf @@ -466,15 +466,27 @@ Logboeke + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1598,19 +1606,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Verfris - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1634,7 +1634,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultate @@ -1642,7 +1642,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Inligting @@ -1650,7 +1650,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klik vir volle afvoer @@ -1658,11 +1658,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Versteek @@ -1670,7 +1670,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open dokument @@ -1678,7 +1678,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Een taak} other { totale take}} @@ -1686,7 +1686,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Misluk @@ -1694,7 +1694,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Voltooid @@ -1702,7 +1702,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Begin @@ -1710,7 +1710,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Wagry @@ -1718,7 +1718,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Versteek gekose @@ -1726,7 +1726,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Versteek van alle @@ -1734,7 +1734,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Bevestig versteek van alle @@ -1742,7 +1742,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1750,7 +1750,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1758,7 +1758,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1766,7 +1766,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1774,7 +1774,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.ar_AR.xlf b/src-ui/src/locale/messages.ar_AR.xlf index 2bdeb0321..69aebac05 100644 --- a/src-ui/src/locale/messages.ar_AR.xlf +++ b/src-ui/src/locale/messages.ar_AR.xlf @@ -466,15 +466,27 @@ السجلات + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - تحديث - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 النتائج @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 معلومات @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 انقر لمشاهدة كامل الإخراج @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 رفض @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 فتح مستند @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, zero {} one { اجمالي المهام} two { اجمالي المهام} few { اجمالي المهام} many { اجمالي المهام}=1 {مهمة واحدة } other { اجمالي المهام}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 فشل @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 أكمل @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 بدأ @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 الانتظار @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 تحديد الرفض @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 رفض الجميع @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 تأكيد رفض الكل @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 تجاهل كل مهام؟ @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 في قائمة الانتظار @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 بدأ @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 اكتمل @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 فشلت diff --git a/src-ui/src/locale/messages.be_BY.xlf b/src-ui/src/locale/messages.be_BY.xlf index d4df5724b..ba2f47440 100644 --- a/src-ui/src/locale/messages.be_BY.xlf +++ b/src-ui/src/locale/messages.be_BY.xlf @@ -466,15 +466,27 @@ Логі + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Аднавіць - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Вынікі @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Інфармацыя @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 націсніце для поўнага вываду @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Адхіліць @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Адкрыць дакумент @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Не атрымалася @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Поўнае выкананне @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Пачатак @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 У чарзе @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Адхіліць выбранае @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Адхіліць усе @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Пацвердзіць Адхіліць усе @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 пачата @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.bg_BG.xlf b/src-ui/src/locale/messages.bg_BG.xlf index bdf7391a2..2526f711e 100644 --- a/src-ui/src/locale/messages.bg_BG.xlf +++ b/src-ui/src/locale/messages.bg_BG.xlf @@ -466,15 +466,27 @@ Дневници + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Опресняване - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Резултати @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Информация @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 щракнете за пълен резултат @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Отхвърляне @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Отваряне на документ @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, one {}=1 {Една задача} other { общо задачи}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Провалени @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Завършени @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Започнати @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Изчакващи @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Отхвърляне на селекцията @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Отхвърляне на всичко @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Потвърдете отхвърлянето на всичко @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Отхвърляне на всички задачи? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 на опашка @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 стартирано @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 завършени @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 неуспял diff --git a/src-ui/src/locale/messages.ca_ES.xlf b/src-ui/src/locale/messages.ca_ES.xlf index 6a69fe4af..4225ccb82 100644 --- a/src-ui/src/locale/messages.ca_ES.xlf +++ b/src-ui/src/locale/messages.ca_ES.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresca - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultats @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 clic per veure sortida completa @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Descarta @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Obre Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, one {}=1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Fallit @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Completat @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Iniciat @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 A la cua @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Descarta seleccionats @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Descarta tot @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirma Descarta Tot @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Descarta totes tasques? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 a la cua @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 començat @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 acabat @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 Ha fallat diff --git a/src-ui/src/locale/messages.cs_CZ.xlf b/src-ui/src/locale/messages.cs_CZ.xlf index 13d333424..99d3c03c1 100644 --- a/src-ui/src/locale/messages.cs_CZ.xlf +++ b/src-ui/src/locale/messages.cs_CZ.xlf @@ -466,15 +466,27 @@ Záznamy + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informace @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 zahájeno @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.da_DK.xlf b/src-ui/src/locale/messages.da_DK.xlf index f23853e21..4b574d9e2 100644 --- a/src-ui/src/locale/messages.da_DK.xlf +++ b/src-ui/src/locale/messages.da_DK.xlf @@ -466,15 +466,27 @@ Logninger + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.de_DE.xlf b/src-ui/src/locale/messages.de_DE.xlf index 264629003..ace103ad4 100644 --- a/src-ui/src/locale/messages.de_DE.xlf +++ b/src-ui/src/locale/messages.de_DE.xlf @@ -466,15 +466,27 @@ Protokolle + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Aktualisieren - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Ergebnisse @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 Für vollständige Ausgabe anklicken @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Verwerfen @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Dokument öffnen @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Eine Aufgabe} other {Insgesamt Aufgaben}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Fehlgeschlagen @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Abgeschlossen @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Gestartet @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Ausstehend @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Ausgewählte verwerfen @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Alle verwerfen @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Alle verwerfen bestätigen @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Alle Aufgaben verwerfen? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 ausstehend @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 gestartet @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 abgeschlossen @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 fehlgeschlagen diff --git a/src-ui/src/locale/messages.el_GR.xlf b/src-ui/src/locale/messages.el_GR.xlf index 45491601c..24b70bd85 100644 --- a/src-ui/src/locale/messages.el_GR.xlf +++ b/src-ui/src/locale/messages.el_GR.xlf @@ -466,15 +466,27 @@ Αρχεία Καταγραφής + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Ανανέωση - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Αποτελέσματα @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Πληροφορίες @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 κάντε κλικ για το πλήρες αποτέλεσμα @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Παράβλεψη @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Άνοιγμα εγγράφου @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Μία εργασία} other { συνολικές εργασίες}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Απέτυχε @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Ολοκληρώθηκε @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Ξεκίνησε @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Στην ουρά @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Παράβλεψη επιλεγμένων @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Παράβλεψη όλων @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Επιβεβαίωση Παράβλεψης Όλων @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 στην ουρά @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 ξεκίνησε @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 ολοκληρώθηκε @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 απέτυχε diff --git a/src-ui/src/locale/messages.es_ES.xlf b/src-ui/src/locale/messages.es_ES.xlf index b93ad8dc9..a46c29508 100644 --- a/src-ui/src/locale/messages.es_ES.xlf +++ b/src-ui/src/locale/messages.es_ES.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Actualizar - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultados @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Información @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 haz clic para obtener una salida completa @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Descartar @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Abrir documento @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, one {}=1 {Una tarea} other { en total tareas}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Error @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Completado @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Iniciado @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Encolado @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Descartar seleccionados @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Descartar todo @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirmar Descartar Todo @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.fi_FI.xlf b/src-ui/src/locale/messages.fi_FI.xlf index 1d7f28411..df1d1132c 100644 --- a/src-ui/src/locale/messages.fi_FI.xlf +++ b/src-ui/src/locale/messages.fi_FI.xlf @@ -466,15 +466,27 @@ Lokit + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Päivitä - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Tulokset @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klikkaa saadaksesi täyden tulosteen @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Hylkää @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Avaa asiakirja @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Epäonnistui @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Onnistui @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Aloitettu @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Jonossa @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Poista valitut @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Poista kaikki @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Vahvista "poista kaikki" @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 jonossa @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 aloitettu @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 valmistui @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 epäonnistui diff --git a/src-ui/src/locale/messages.fr_FR.xlf b/src-ui/src/locale/messages.fr_FR.xlf index 89afbd485..952b8e738 100644 --- a/src-ui/src/locale/messages.fr_FR.xlf +++ b/src-ui/src/locale/messages.fr_FR.xlf @@ -466,15 +466,27 @@ Journaux + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Rafraîchir - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Résultats @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Information @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 cliquer pour obtenir l'affichage complet @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Ignorer @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Ouvrir le document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural,=1 {Une tâche } other { tâches }} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Échouées @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Réussies @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Commencées @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 En attente @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Ignorer la sélection @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Tout ignorer @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirmer « Tout ignorer » @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Ignorer les tâches ? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 liste d'attente @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 commencé @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 terminé @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 échec @@ -1960,13 +1960,13 @@ Erreur lors de l'enregistrement de l'utilisateur. - + Confirm delete user account src/app/components/admin/users-groups/users-groups.component.ts 114 - Confirmer la suppression du compte utilisateur + Confirmer la suppression du compte utilisateur This operation will permanently delete this user account. @@ -2797,13 +2797,13 @@ Affecter des autorisations de vue - + Assign edit permissions src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 61 - Assigner des autorisations d'édition + Assigner des autorisations d'édition Error @@ -4159,13 +4159,13 @@ État - + Copy Raw Error src/app/components/common/toasts/toasts.component.html 33 - Erreur lors de la copie brute + Copier l'erreur brute Hello , welcome to Paperless-ngx @@ -6120,13 +6120,13 @@ Erreur lors de la récupération des règles de messagerie - + Saved account "". src/app/components/manage/mail/mail.component.ts 92 - Compte enregistré. + Compte enregistré. Error saving account. @@ -6136,21 +6136,21 @@ Erreur lors de l'enregistrement du compte. - + Confirm delete mail account src/app/components/manage/mail/mail.component.ts 112 - Confirmer la suppression du compte de messagerie + Confirmer la suppression du compte de messagerie - + This operation will permanently delete this mail account. src/app/components/manage/mail/mail.component.ts 113 - Cette opération supprimera définitivement ce compte de messagerie. + Cette opération supprimera définitivement ce compte de messagerie. Deleted mail account @@ -6216,13 +6216,13 @@ Erreur lors de la supression de la règle de messagerie. - + Permissions updated src/app/components/manage/mail/mail.component.ts 212 - Droits d'accès mis à jour + Droits d'accès mis à jour Error updating permissions diff --git a/src-ui/src/locale/messages.he_IL.xlf b/src-ui/src/locale/messages.he_IL.xlf index a83994c73..3b959df8f 100644 --- a/src-ui/src/locale/messages.he_IL.xlf +++ b/src-ui/src/locale/messages.he_IL.xlf @@ -466,15 +466,27 @@ יומני רישום + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - רענון - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 תוצאות @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 מידע @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 לחיצה תציג פלט מלא @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 התעלמות @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 פתח מסמך @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 הושלם @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 התחיל @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 בתור @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 בטל מסומנים @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 בטל הכל @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 אשר לבטל מסומנים @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 בתור @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 התחיל @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 הושלם @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 נכשל diff --git a/src-ui/src/locale/messages.hr_HR.xlf b/src-ui/src/locale/messages.hr_HR.xlf index 1a76efa33..f22825b74 100644 --- a/src-ui/src/locale/messages.hr_HR.xlf +++ b/src-ui/src/locale/messages.hr_HR.xlf @@ -466,15 +466,27 @@ Zapisnici + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informacije @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 započeto @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.hu_HU.xlf b/src-ui/src/locale/messages.hu_HU.xlf index 77f5df45a..21cd1b000 100644 --- a/src-ui/src/locale/messages.hu_HU.xlf +++ b/src-ui/src/locale/messages.hu_HU.xlf @@ -194,7 +194,7 @@ node_modules/src/ngb-config.ts 13 - Csökkenő órák + Órák csökkentése Next @@ -226,7 +226,7 @@ node_modules/src/ngb-config.ts 13 - Csökkenő percek + Percek csökkentése SS @@ -288,7 +288,7 @@ src/app/app.component.ts 92 - Document was added to Paperless-ngx. + A dokumentum hozzá lett adva a Paperless-ngx-hez. Open document @@ -316,7 +316,7 @@ src/app/app.component.ts 122 - Document is being processed by Paperless-ngx. + A dokumentumot a Paperless-ngx feldolgozza. Prev @@ -466,15 +466,27 @@ Naplók + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Automatikus frissítés + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1598,19 +1606,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Frissítés - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1634,7 +1634,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Eredmények @@ -1642,7 +1642,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Infó @@ -1650,7 +1650,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 kattintson a teljes kimenetért @@ -1658,11 +1658,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Elutasít @@ -1670,7 +1670,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Dokumentum megnyitása @@ -1678,7 +1678,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Egy feladat} other { összesen feladatok}} @@ -1686,7 +1686,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Sikertelen @@ -1694,7 +1694,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Teljes @@ -1702,7 +1702,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Elindult @@ -1710,7 +1710,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Várakozik @@ -1718,7 +1718,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Elveti a kijelöltet @@ -1726,7 +1726,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Elveti az összeset @@ -1734,7 +1734,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Összes elvetés megerősítése @@ -1742,7 +1742,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Az összes feladat elvetése? @@ -1750,7 +1750,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 várakozik @@ -1758,7 +1758,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 elindult @@ -1766,7 +1766,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 elkészült @@ -1774,7 +1774,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 sikertelen @@ -1928,7 +1928,7 @@ src/app/components/admin/users-groups/users-groups.component.html 55 - Új csoport + Csoport hozzáadása No groups defined @@ -2289,7 +2289,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html 26 - Címkék + Jelölők Document Types @@ -4075,7 +4075,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 46 - Expires + Lejárati idő Create @@ -5856,7 +5856,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.html 1 - Consumption Templates + Felhasználói sablonok Add Template @@ -7065,7 +7065,7 @@ src/app/services/settings.service.ts 239 - Hungarian + Magyar Italian diff --git a/src-ui/src/locale/messages.id_ID.xlf b/src-ui/src/locale/messages.id_ID.xlf index 11c642547..f78d3104c 100644 --- a/src-ui/src/locale/messages.id_ID.xlf +++ b/src-ui/src/locale/messages.id_ID.xlf @@ -466,15 +466,27 @@ Log + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informasi @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.it_IT.xlf b/src-ui/src/locale/messages.it_IT.xlf index 8bd44d755..571d2169f 100644 --- a/src-ui/src/locale/messages.it_IT.xlf +++ b/src-ui/src/locale/messages.it_IT.xlf @@ -466,15 +466,27 @@ Log + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Aggiorna - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Risultati @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informazioni @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 clicca per l'output completo @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Ignora @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Apri Documento @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Una attività} other { totale attività}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Fallito @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Completato @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Aviato @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 In coda @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Ignora selezionati @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Ignora tutto @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Conferma Ignora Tutto @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 in coda @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 avviato @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completato @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 fallito diff --git a/src-ui/src/locale/messages.ko_KR.xlf b/src-ui/src/locale/messages.ko_KR.xlf index 4e29ddcb0..1261e630e 100644 --- a/src-ui/src/locale/messages.ko_KR.xlf +++ b/src-ui/src/locale/messages.ko_KR.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.lb_LU.xlf b/src-ui/src/locale/messages.lb_LU.xlf index 70abc553d..02d24740d 100644 --- a/src-ui/src/locale/messages.lb_LU.xlf +++ b/src-ui/src/locale/messages.lb_LU.xlf @@ -466,15 +466,27 @@ Protokoller + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informatiounen @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Dokument opmaachen @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.lv_LV.xlf b/src-ui/src/locale/messages.lv_LV.xlf index faef9fc84..86e08bc84 100644 --- a/src-ui/src/locale/messages.lv_LV.xlf +++ b/src-ui/src/locale/messages.lv_LV.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.nl_NL.xlf b/src-ui/src/locale/messages.nl_NL.xlf index 72980c757..275fd690d 100644 --- a/src-ui/src/locale/messages.nl_NL.xlf +++ b/src-ui/src/locale/messages.nl_NL.xlf @@ -288,7 +288,7 @@ src/app/app.component.ts 92 - Document was added to Paperless-ngx. + Document is toegevoegd aan Paperless-ngx. Open document @@ -316,7 +316,7 @@ src/app/app.component.ts 122 - Document is being processed by Paperless-ngx. + Document wordt verwerkt door Paperless-ngx. Prev @@ -466,15 +466,27 @@ Logbestanden + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Automatisch vernieuwen + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -756,7 +764,7 @@ src/app/components/admin/settings/settings.component.html 139,142 - Update checking works by pinging the public GitHub API for the latest release to determine whether a new version is available. Actual updating of the app must still be performed manually. + Updatecontrole werkt door de openbare GitHub API te gebruiken om te bepalen of een nieuwe versie beschikbaar is. Het daadwerkelijk updaten van de app moet nog handmatig worden gedaan. No tracking data is collected by the app in any way. @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Vernieuw - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultaten @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informatie @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klik voor volledige output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Verbergen @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Document openen @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Eén taak} other { taken in totaal}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Mislukt @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Voltooid @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Gestart @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Wachtrij @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Verberg geselecteerde @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Verberg alle @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Bevestig alles verbergen @@ -1740,15 +1740,15 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 - Dismiss all tasks? + Verberg alle taken? queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 in wachtrij @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 gestart @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 voltooid @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 mislukt @@ -2375,7 +2375,7 @@ src/app/components/app-frame/app-frame.component.html 199 - Administration + Beheer File Tasks @@ -2439,7 +2439,7 @@ src/app/components/app-frame/app-frame.component.ts 247 - Sidebar views updated + Zijbalkweergaven bijgewerkt Error updating sidebar views @@ -2447,7 +2447,7 @@ src/app/components/app-frame/app-frame.component.ts 250 - Error updating sidebar views + Fout tijdens bijwerken van zijbalkweergaven An error occurred while saving update checking settings. @@ -2563,7 +2563,7 @@ src/app/components/manage/custom-fields/custom-fields.component.ts 59 - Saved field "". + Veld "" opgeslagen. Error saving field. @@ -2683,7 +2683,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 21 - Apply to documents that match this filename. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + Toepassen op documenten die overeenkomen met deze bestandsnaam. Wildcards als *.pdf of *factuur* zijn toegestaan. Niet hoofdlettergevoelig. Filter path @@ -2699,7 +2699,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 22 - Apply to documents that match this path. Wildcards specified as * are allowed. Case insensitive.</a> + Toepassen op documenten die overeenkomen met dit pad. Wildcards met * zijn toegestaan. Niet hoofdlettergevoelig.</a> Filter mail rule @@ -2707,7 +2707,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 23 - Filter mail rule + Filter op e-mailregel Apply to documents consumed via this mail rule. @@ -2715,7 +2715,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 23 - Apply to documents consumed via this mail rule. + Toepassen op documenten die via deze e-mailregel zijn toegevoegd. Assignments @@ -2723,7 +2723,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 28 - Assignments + Toewijzingen Assign title @@ -2739,7 +2739,7 @@ src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html 33 - Can include some placeholders, see <a target='_blank' href='https://docs.paperless-ngx.com/usage/#consumption-templates'>documentation</a>. + Kan enkele placeholders bevatten, zie <a target='_blank' href='https://docs.paperless-ngx.com/usage/#consumption-templates'>documentatie</a>. Assign tags @@ -3019,7 +3019,7 @@ src/app/components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component.ts 39 - Create new custom field + Nieuw aangepast veld Edit custom field @@ -3027,7 +3027,7 @@ src/app/components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component.ts 43 - Edit custom field + Bewerk aangepast veld Create new document type @@ -3355,7 +3355,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 29 - Assignments specified here will supersede any consumption templates. + Deze toewijzingen zullen die van consumpiesjablonen vervangen. Assign title from @@ -3379,7 +3379,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 35 - Assign owner from rule + Eigenaar van regel toewijzen Only process attachments @@ -3471,7 +3471,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts 84 - Do not assign title from this rule + Titel van deze regel niet gebruiken Do not assign a correspondent @@ -3780,7 +3780,7 @@ src/app/components/common/input/url/url.component.html 8 - Remove + Verwijderen Invalid date. @@ -3885,7 +3885,7 @@ src/app/components/common/input/select/select.component.ts 92 - No items found + Geen items gevonden Add tag @@ -3909,7 +3909,7 @@ src/app/components/common/input/url/url.component.html 14 - Open link + Link openen Set permissions @@ -3917,7 +3917,7 @@ src/app/components/common/permissions-dialog/permissions-dialog.component.ts 28 - Set permissions + Rechten toepassen Edit permissions for @@ -3925,7 +3925,7 @@ src/app/components/common/permissions-dialog/permissions-dialog.component.ts 33 - Edit permissions for + Rechten bewerken voor Note that permissions set here will override any existing permissions @@ -4025,7 +4025,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 26 - Share Links + Gedeelde links No existing links @@ -4033,7 +4033,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 10,12 - No existing links + Geen bestaande links Copy @@ -4041,7 +4041,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 23 - Copy + Kopiëren Share @@ -4049,7 +4049,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 28 - Share + Delen Copied! @@ -4057,7 +4057,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 36 - Copied! + Gekopieerd! Share archive version @@ -4065,7 +4065,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 42 - Share archive version + Deel gearchiveerde versie Expires @@ -4073,7 +4073,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.html 46 - Expires + Verloopt Create @@ -4093,7 +4093,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 90 - 1 day + 1 dag 7 days @@ -4101,7 +4101,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 20 - 7 days + 7 dagen 30 days @@ -4109,7 +4109,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 21 - 30 days + 30 dagen Never @@ -4117,7 +4117,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 22 - Never + Nooit Error retrieving links @@ -4125,7 +4125,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 74 - Error retrieving links + Fout bij ophalen van links days @@ -4133,7 +4133,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 90 - days + dagen Error deleting link @@ -4141,7 +4141,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 117 - Error deleting link + Fout bij verwijderen link Error creating link @@ -4149,7 +4149,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts 145 - Error creating link + Fout bij maken link Status @@ -4157,7 +4157,7 @@ src/app/components/common/toasts/toasts.component.html 22 - Status + Status Copy Raw Error @@ -4165,7 +4165,7 @@ src/app/components/common/toasts/toasts.component.html 33 - Copy Raw Error + Kopieer onbewerkte foutmelding Hello , welcome to Paperless-ngx @@ -4189,7 +4189,7 @@ src/app/components/dashboard/dashboard.component.ts 71 - Dashboard updated + Dashboard bijgewerkt Error updating dashboard @@ -4197,7 +4197,7 @@ src/app/components/dashboard/dashboard.component.ts 74 - Error updating dashboard + Fout bij bijwerken dashboard Show all @@ -4301,7 +4301,7 @@ src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html 53 - No documents + Geen documenten Statistics @@ -4373,7 +4373,7 @@ src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html 4 - Drop documents anywhere or + Sleep documenten hierheen of Browse files @@ -4884,7 +4884,7 @@ src/app/components/document-detail/document-detail.component.ts 655 - Error deleting document + Fout bij verwijderen document Redo OCR confirm @@ -4920,7 +4920,7 @@ src/app/components/document-detail/document-detail.component.ts 698 - Error executing operation + Fout bij uitvoeren bewerking Select: @@ -5024,7 +5024,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts 185 - Error executing bulk operation + Fout bij uitvoeren bulkbewerking "" @@ -5698,7 +5698,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts 211 - Custom fields + Aangepaste velden Advanced search @@ -5830,7 +5830,7 @@ src/app/components/document-notes/document-notes.component.ts 80 - Error deleting note + Fout bij verwijderen notitie Drop files to begin upload @@ -5854,7 +5854,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.html 1 - Consumption Templates + Consumptie sjablonen Add Template @@ -5862,7 +5862,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.html 6 - Add Template + Sjalboon toevoegen Document Sources @@ -5870,7 +5870,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.html 16 - Document Sources + Documentbron No templates defined. @@ -5878,7 +5878,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.html 42 - No templates defined. + Geen sjablonen aangemaakt. Saved template "". @@ -5886,7 +5886,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 73 - Saved template "". + Sjabloon "" opgeslagen. Error saving template. @@ -5894,7 +5894,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 81 - Error saving template. + Fout bij opslaan sjabloon. Confirm delete template @@ -5902,7 +5902,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 89 - Confirm delete template + Bevestig sjabloon verwijderen This operation will permanently delete this template. @@ -5910,7 +5910,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 90 - This operation will permanently delete this template. + Deze bewerking zal dit sjabloon permanent verwijderen. Deleted template @@ -5918,7 +5918,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 99 - Deleted template + Sjabloon verwijderd Error deleting template. @@ -5926,7 +5926,7 @@ src/app/components/manage/consumption-templates/consumption-templates.component.ts 104 - Error deleting template. + Fout bij verwijderen sjabloon. correspondent @@ -5966,7 +5966,7 @@ src/app/components/manage/custom-fields/custom-fields.component.html 6 - Add Field + Veld toevoegen Data Type @@ -5974,7 +5974,7 @@ src/app/components/manage/custom-fields/custom-fields.component.html 15 - Data Type + Gegevenstype No fields defined. @@ -5982,7 +5982,7 @@ src/app/components/manage/custom-fields/custom-fields.component.html 40 - No fields defined. + Geen velden aangemaakt. Confirm delete field @@ -5990,7 +5990,7 @@ src/app/components/manage/custom-fields/custom-fields.component.ts 74 - Confirm delete field + Bevestig veld verwijderen This operation will permanently delete this field. @@ -5998,7 +5998,7 @@ src/app/components/manage/custom-fields/custom-fields.component.ts 75 - This operation will permanently delete this field. + Deze bewerking zal dit veld permanent verwijderen. Deleted field @@ -6006,7 +6006,7 @@ src/app/components/manage/custom-fields/custom-fields.component.ts 84 - Deleted field + Veld verwijderd Error deleting field. @@ -6014,7 +6014,7 @@ src/app/components/manage/custom-fields/custom-fields.component.ts 89 - Error deleting field. + Fout bij verwijderen veld. document type @@ -6046,7 +6046,7 @@ src/app/components/manage/mail/mail.component.html 1 - Mail Settings + E-mail instellingen Mail accounts @@ -6222,7 +6222,7 @@ src/app/components/manage/mail/mail.component.ts 212 - Permissions updated + Rechten bijgewerkt Error updating permissions @@ -6234,7 +6234,7 @@ src/app/components/manage/management-list/management-list.component.ts 300 - Error updating permissions + Fout bij bijwerken rechten Create @@ -6254,7 +6254,7 @@ src/app/components/manage/management-list/management-list.component.html 13,17 - Create + Maak Filter by: @@ -6426,7 +6426,7 @@ src/app/components/manage/management-list/management-list.component.ts 219 - Error while deleting element + Fout tijdens het verwijderen van element Permissions updated successfully @@ -6434,7 +6434,7 @@ src/app/components/manage/management-list/management-list.component.ts 293 - Permissions updated successfully + Rechten succesvol bijgewerkt storage path @@ -6602,7 +6602,7 @@ src/app/data/paperless-custom-field.ts 16 - Boolean + Boolean Date @@ -6610,7 +6610,7 @@ src/app/data/paperless-custom-field.ts 20 - Date + Datum Integer @@ -6618,7 +6618,7 @@ src/app/data/paperless-custom-field.ts 24 - Integer + Geheel getal Number @@ -6626,7 +6626,7 @@ src/app/data/paperless-custom-field.ts 28 - Number + Getal Monetary @@ -6634,7 +6634,7 @@ src/app/data/paperless-custom-field.ts 32 - Monetary + Monetair Text @@ -6642,7 +6642,7 @@ src/app/data/paperless-custom-field.ts 36 - Text + Tekst Url @@ -6650,7 +6650,7 @@ src/app/data/paperless-custom-field.ts 40 - Url + Url Warning: You have unsaved changes to your document(s). @@ -6959,7 +6959,7 @@ src/app/services/settings.service.ts 161 - Afrikaans + Afrikaans Arabic @@ -6983,7 +6983,7 @@ src/app/services/settings.service.ts 179 - Bulgarian + Bulgaars Catalan @@ -7023,7 +7023,7 @@ src/app/services/settings.service.ts 209 - Greek + Grieks English (GB) @@ -7063,7 +7063,7 @@ src/app/services/settings.service.ts 239 - Hungarian + Hongaars Italian @@ -7095,7 +7095,7 @@ src/app/services/settings.service.ts 263 - Norwegian + Noors Polish diff --git a/src-ui/src/locale/messages.no_NO.xlf b/src-ui/src/locale/messages.no_NO.xlf index e62e6cb4c..fbb14002b 100644 --- a/src-ui/src/locale/messages.no_NO.xlf +++ b/src-ui/src/locale/messages.no_NO.xlf @@ -466,15 +466,27 @@ Logger + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Oppdater - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultater @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klikk for full utdata @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Avvis @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Åpne dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {En oppgave} other { totalt oppgaver}}}"/> @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Feilet @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Avvis valgte @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Avvis alle @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Bekreft avvisning av alle @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 i kø @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 startet @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 fullført @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 feilet diff --git a/src-ui/src/locale/messages.pl_PL.xlf b/src-ui/src/locale/messages.pl_PL.xlf index 7f40223e7..6495a4545 100644 --- a/src-ui/src/locale/messages.pl_PL.xlf +++ b/src-ui/src/locale/messages.pl_PL.xlf @@ -466,15 +466,27 @@ Logi + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Odśwież - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Wyniki @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informacje @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 kliknij, aby uzyskać pełne dane @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Odrzuć @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Otwórz dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Odrzuć zaznaczone @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Odrzuć wszystkie @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Potwierdź odrzucenie wszystkich @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 start @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.pt_BR.xlf b/src-ui/src/locale/messages.pt_BR.xlf index 6c3a5060a..8541ee690 100644 --- a/src-ui/src/locale/messages.pt_BR.xlf +++ b/src-ui/src/locale/messages.pt_BR.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Atualizar - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultados @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informação @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 clique para obter a saída completa @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dispensar @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Abrir Documento @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dispensar selecionado @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dispensar todos @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirmar Dispensar Todos @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.pt_PT.xlf b/src-ui/src/locale/messages.pt_PT.xlf index 4760f7ae4..f7a065810 100644 --- a/src-ui/src/locale/messages.pt_PT.xlf +++ b/src-ui/src/locale/messages.pt_PT.xlf @@ -466,15 +466,27 @@ Registos + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Atualizar - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultados @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informação @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dispensar @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Abrir documento @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural,=1 {Umatarefa}other { tarefas no total}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Falha @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Completo @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Iniciado @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Em fila @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Descartar selecionado @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Descartar todos @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirmar o descartar de todos @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 em fila @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 iniciado @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completo @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 falhou diff --git a/src-ui/src/locale/messages.ro_RO.xlf b/src-ui/src/locale/messages.ro_RO.xlf index 32d28036d..34661010b 100644 --- a/src-ui/src/locale/messages.ro_RO.xlf +++ b/src-ui/src/locale/messages.ro_RO.xlf @@ -466,15 +466,27 @@ Jurnale + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informații @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.ru_RU.xlf b/src-ui/src/locale/messages.ru_RU.xlf index a6432627f..6cb82acb4 100644 --- a/src-ui/src/locale/messages.ru_RU.xlf +++ b/src-ui/src/locale/messages.ru_RU.xlf @@ -466,15 +466,27 @@ Логи + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Обновить - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Результаты @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Информация @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 нажать для полного вывода @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Отклонить @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Открыть документ @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Неудачно @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Отменить выбранное @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Отменить все @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Подтвердить отмену всех @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 запущено @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.sk_SK.xlf b/src-ui/src/locale/messages.sk_SK.xlf index fa596448c..69b26900a 100644 --- a/src-ui/src/locale/messages.sk_SK.xlf +++ b/src-ui/src/locale/messages.sk_SK.xlf @@ -466,15 +466,27 @@ Logy + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Obnoviť - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Výsledky @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 kliknite pre celý výstup @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Zrušiť @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Otvoriť dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Jedna úloha} other { celkom úloh}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Neúspešné @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Úspešné @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Spustené @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Čakajúce @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Odstrániť vybrané @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Odstrániť všetky @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Potvrdenie odstránenia @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 v poradí @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 prebieha @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 dokončené @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 neúspešné diff --git a/src-ui/src/locale/messages.sl_SI.xlf b/src-ui/src/locale/messages.sl_SI.xlf index 9188d9b77..7a9cf2220 100644 --- a/src-ui/src/locale/messages.sl_SI.xlf +++ b/src-ui/src/locale/messages.sl_SI.xlf @@ -466,15 +466,27 @@ Dnevniki + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Osveži - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Rezultat @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informacije @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 kliknite za celoten izpis @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Opusti @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Odpri dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Ena naloga} other { skupno nalog}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Neuspešno @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Dokončano @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Začeto @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Čaka @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Opusti izbrano @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Opusti vse @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Potrdi Opusti vse @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Opustite vsa opravila? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 čaka @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 začeto @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 končano @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 neuspešno diff --git a/src-ui/src/locale/messages.sr_CS.xlf b/src-ui/src/locale/messages.sr_CS.xlf index bceeb4085..bee916d17 100644 --- a/src-ui/src/locale/messages.sr_CS.xlf +++ b/src-ui/src/locale/messages.sr_CS.xlf @@ -466,15 +466,27 @@ Logovi + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Osveži - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Rezultati @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Informacije @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klikni za pun prikaz @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Odbaci @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Otvori dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Neuspešno @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Završeno @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Pokrenuto @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Na čekanju @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Odbaci selektovano @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Odbaci sve @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Potvrdi odbacivanje svega @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Odbaci sve zadatke? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 čekanje @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 pokrenuto @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 završeno @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 neuspešno diff --git a/src-ui/src/locale/messages.sv_SE.xlf b/src-ui/src/locale/messages.sv_SE.xlf index bc7772a14..41fa476fe 100644 --- a/src-ui/src/locale/messages.sv_SE.xlf +++ b/src-ui/src/locale/messages.sv_SE.xlf @@ -466,15 +466,27 @@ Loggar + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Uppdatera - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Resultat @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 klicka för full utdata @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Avvisa @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Öppna Dokument @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, one {}=1 {En uppgift} other { totalt uppgifter}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Misslyckades @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Lyckades @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Startade @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Köade @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Avfärda markerade @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Avfärda alla @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Bekräfta avfärda alla @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 köade @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 startade @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 slutförda @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 misslyckade diff --git a/src-ui/src/locale/messages.th_TH.xlf b/src-ui/src/locale/messages.th_TH.xlf index 8e9d28226..8bd9f8e54 100644 --- a/src-ui/src/locale/messages.th_TH.xlf +++ b/src-ui/src/locale/messages.th_TH.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - รีเฟรช - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 ผลลัพธ์ @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 ข้อมูล @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 ปิด @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 เปิดเอกสาร @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 ล้างการเลือก @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 ละทิ้งทั้งหมด @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 ยืนยันล้างทั้งหมด @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 จัดคิวแล้ว @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 เริ่มต้นแล้ว @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 เสร็จสมบูรณ์ @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 ล้มเหลว diff --git a/src-ui/src/locale/messages.tr_TR.xlf b/src-ui/src/locale/messages.tr_TR.xlf index 4164f0a49..550512d2b 100644 --- a/src-ui/src/locale/messages.tr_TR.xlf +++ b/src-ui/src/locale/messages.tr_TR.xlf @@ -466,15 +466,27 @@ Günlükler + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Yenile - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Sonuçlar @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Bilgi @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Yoksay @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Belgeyi Aç @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Seçilenleri temizle @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 başladı @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.uk_UA.xlf b/src-ui/src/locale/messages.uk_UA.xlf index 57073cb7f..2ab29dee1 100644 --- a/src-ui/src/locale/messages.uk_UA.xlf +++ b/src-ui/src/locale/messages.uk_UA.xlf @@ -466,15 +466,27 @@ Логи + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Оновити - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Результати @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Інформація @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 натисніть для повного виведення @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Відхилити @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Відкрити документ @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {Одне завдання} other { всього завдань}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Невдачі @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Завершено @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Розпочато @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 У черзі @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Відхилити вибрані @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Відхилити все @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Підтвердити відхилення всіх @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 в черзі @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 запущено @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 завершено @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 невдачі diff --git a/src-ui/src/locale/messages.vi_VN.xlf b/src-ui/src/locale/messages.vi_VN.xlf index aad663995..efc231e33 100644 --- a/src-ui/src/locale/messages.vi_VN.xlf +++ b/src-ui/src/locale/messages.vi_VN.xlf @@ -466,15 +466,27 @@ Nhật ký + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Tải lại - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Kết quả @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Thông tin @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click để có đầu ra đầy đủ @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Bỏ qua @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Mở tài liệu @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Loại bỏ đã được chọn @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Bỏ qua tất cả @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Xác nhận loại bỏ tất cả @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed @@ -1802,7 +1802,7 @@ src/app/components/common/permissions-filter-dropdown/permissions-filter-dropdown.component.html 68 - Users + Người dùng Add User @@ -1810,7 +1810,7 @@ src/app/components/admin/users-groups/users-groups.component.html 11 - Add User + Thêm Người dùng Username diff --git a/src-ui/src/locale/messages.zh_CN.xlf b/src-ui/src/locale/messages.zh_CN.xlf index f2fe51fbf..ee0ddee76 100644 --- a/src-ui/src/locale/messages.zh_CN.xlf +++ b/src-ui/src/locale/messages.zh_CN.xlf @@ -466,15 +466,27 @@ 日志 + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - 刷新 - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 结果 @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 信息 @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 单击以获取完整输出 @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 关闭 @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 打开文档 @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 失败 @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 完成 @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 开始 @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 排队 @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 取消选择 @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 取消所有 @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 确认取消所有 @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 已开始 @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src-ui/src/locale/messages.zh_TW.xlf b/src-ui/src/locale/messages.zh_TW.xlf index 1e32e4a53..aadb208d2 100644 --- a/src-ui/src/locale/messages.zh_TW.xlf +++ b/src-ui/src/locale/messages.zh_TW.xlf @@ -466,15 +466,27 @@ Logs + + Auto refresh + + src/app/components/admin/logs/logs.component.html + 4 + + + src/app/components/admin/tasks/tasks.component.html + 15 + + Auto refresh + Loading... src/app/components/admin/logs/logs.component.html - 11 + 16 src/app/components/admin/logs/logs.component.html - 20 + 25 src/app/components/admin/settings/settings.component.html @@ -482,11 +494,7 @@ src/app/components/admin/tasks/tasks.component.html - 19 - - - src/app/components/admin/tasks/tasks.component.html - 27 + 22 src/app/components/admin/users-groups/users-groups.component.html @@ -1106,7 +1114,7 @@ src/app/components/admin/tasks/tasks.component.html - 40 + 35 src/app/components/admin/users-groups/users-groups.component.html @@ -1246,7 +1254,7 @@ src/app/components/admin/tasks/tasks.component.html - 44 + 39 src/app/components/admin/users-groups/users-groups.component.html @@ -1596,19 +1604,11 @@ - - Refresh - - src/app/components/admin/tasks/tasks.component.html - 20 - - Refresh - Created src/app/components/admin/tasks/tasks.component.html - 41 + 36 src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -1632,7 +1632,7 @@ Results src/app/components/admin/tasks/tasks.component.html - 42 + 37 Results @@ -1640,7 +1640,7 @@ Info src/app/components/admin/tasks/tasks.component.html - 43 + 38 Info @@ -1648,7 +1648,7 @@ click for full output src/app/components/admin/tasks/tasks.component.html - 66 + 61 click for full output @@ -1656,11 +1656,11 @@ Dismiss src/app/components/admin/tasks/tasks.component.html - 81 + 76 src/app/components/admin/tasks/tasks.component.ts - 63 + 66 Dismiss @@ -1668,7 +1668,7 @@ Open Document src/app/components/admin/tasks/tasks.component.html - 87 + 82 Open Document @@ -1676,7 +1676,7 @@ {VAR_PLURAL, plural, =1 {One task} other { total tasks}} src/app/components/admin/tasks/tasks.component.html - 103 + 98 {VAR_PLURAL, plural, =1 {One task} other { total tasks}} @@ -1684,7 +1684,7 @@ Failed src/app/components/admin/tasks/tasks.component.html - 110 + 105 Failed @@ -1692,7 +1692,7 @@ Complete src/app/components/admin/tasks/tasks.component.html - 116 + 111 Complete @@ -1700,7 +1700,7 @@ Started src/app/components/admin/tasks/tasks.component.html - 122 + 117 Started @@ -1708,7 +1708,7 @@ Queued src/app/components/admin/tasks/tasks.component.html - 128 + 123 Queued @@ -1716,7 +1716,7 @@ Dismiss selected src/app/components/admin/tasks/tasks.component.ts - 28 + 30 Dismiss selected @@ -1724,7 +1724,7 @@ Dismiss all src/app/components/admin/tasks/tasks.component.ts - 29 + 31 Dismiss all @@ -1732,7 +1732,7 @@ Confirm Dismiss All src/app/components/admin/tasks/tasks.component.ts - 60 + 63 Confirm Dismiss All @@ -1740,7 +1740,7 @@ Dismiss all tasks? src/app/components/admin/tasks/tasks.component.ts - 61 + 64 Dismiss all tasks? @@ -1748,7 +1748,7 @@ queued src/app/components/admin/tasks/tasks.component.ts - 129 + 132 queued @@ -1756,7 +1756,7 @@ started src/app/components/admin/tasks/tasks.component.ts - 131 + 134 started @@ -1764,7 +1764,7 @@ completed src/app/components/admin/tasks/tasks.component.ts - 133 + 136 completed @@ -1772,7 +1772,7 @@ failed src/app/components/admin/tasks/tasks.component.ts - 135 + 138 failed diff --git a/src/locale/el_GR/LC_MESSAGES/django.po b/src/locale/el_GR/LC_MESSAGES/django.po index 3120a658f..12503c89f 100644 --- a/src/locale/el_GR/LC_MESSAGES/django.po +++ b/src/locale/el_GR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-10 09:02-0800\n" -"PO-Revision-Date: 2023-11-13 01:30\n" +"PO-Revision-Date: 2023-11-30 19:23\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -553,15 +553,15 @@ msgstr "κοινοποίηση συνδέσμων" #: documents/models.py:748 msgid "Consume Folder" -msgstr "" +msgstr "Φάκελος Κατανάλωσης" #: documents/models.py:749 msgid "Api Upload" -msgstr "" +msgstr "Μεταφόρτωση μέσω API" #: documents/models.py:750 msgid "Mail Fetch" -msgstr "" +msgstr "Λήψη Αλληλογραφίας" #: documents/models.py:754 paperless_mail/models.py:95 msgid "order" @@ -569,15 +569,15 @@ msgstr "σειρά" #: documents/models.py:763 msgid "filter path" -msgstr "" +msgstr "διαδρομή φίλτρου" #: documents/models.py:768 msgid "Only consume documents with a path that matches this if specified. Wildcards specified as * are allowed. Case insensitive." -msgstr "" +msgstr "Μόνο κατανάλωση εγγράφων με μια διαδρομή που ταιριάζει με αυτό αν έχει καθοριστεί. Επιτρέπεται η χρήση μπαλαντέρ που ορίζεται ως *. Χωρίς διάκριση πεζών-κεφαλαίων." #: documents/models.py:775 msgid "filter filename" -msgstr "" +msgstr "φιλτράρισμα ονόματος αρχείου" #: documents/models.py:780 paperless_mail/models.py:148 msgid "Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." @@ -585,15 +585,15 @@ msgstr "Μόνο κατανάλωση αρχείων που ταιριάζουν #: documents/models.py:791 msgid "filter documents from this mail rule" -msgstr "" +msgstr "φιλτράρισμα εγγράφων από αυτόν τον κανόνα αλληλογραφίας" #: documents/models.py:795 msgid "assign title" -msgstr "" +msgstr "ανάθεση τίτλου" #: documents/models.py:800 msgid "Assign a document title, can include some placeholders, see documentation." -msgstr "" +msgstr "Η ανάθεση τίτλου εγγράφου μπορεί να περιέχει μερικά placeholders, δείτε την τεκμηρίωση." #: documents/models.py:808 paperless_mail/models.py:204 msgid "assign this tag" @@ -609,83 +609,83 @@ msgstr "ανάθεση αυτού του ανταποκριτή" #: documents/models.py:832 msgid "assign this storage path" -msgstr "" +msgstr "ανάθεση αυτής της διαδρομής αποθήκευσης" #: documents/models.py:841 msgid "assign this owner" -msgstr "" +msgstr "ανάθεση αυτού του ιδιοκτήτη" #: documents/models.py:848 msgid "grant view permissions to these users" -msgstr "" +msgstr "εκχώρηση δικαιωμάτων προβολής σε αυτούς τους χρήστες" #: documents/models.py:855 msgid "grant view permissions to these groups" -msgstr "" +msgstr "εκχώρηση δικαιωμάτων προβολής σε αυτές τις ομάδες" #: documents/models.py:862 msgid "grant change permissions to these users" -msgstr "" +msgstr "εκχώρηση δικαιωμάτων μεταβολής σε αυτές τις ομάδες" #: documents/models.py:869 msgid "grant change permissions to these groups" -msgstr "" +msgstr "εκχώρηση δικαιωμάτων μεταβολής σε αυτές τις ομάδες" #: documents/models.py:873 msgid "consumption template" -msgstr "" +msgstr "πρότυπο κατανάλωσης" #: documents/models.py:874 msgid "consumption templates" -msgstr "" +msgstr "πρότυπα κατανάλωσης" #: documents/models.py:886 msgid "String" -msgstr "" +msgstr "Συμβολοσειρά" #: documents/models.py:887 msgid "URL" -msgstr "" +msgstr "URL" #: documents/models.py:888 msgid "Date" -msgstr "" +msgstr "Ημερομηνία" #: documents/models.py:889 msgid "Boolean" -msgstr "" +msgstr "Δυαδικές τιμές" #: documents/models.py:890 msgid "Integer" -msgstr "" +msgstr "Ακέραιος" #: documents/models.py:891 msgid "Float" -msgstr "" +msgstr "Δεκαδικός" #: documents/models.py:892 msgid "Monetary" -msgstr "" +msgstr "Νομισματικό" #: documents/models.py:904 msgid "data type" -msgstr "" +msgstr "τύπος δεδομένων" #: documents/models.py:912 msgid "custom field" -msgstr "" +msgstr "προσαρμοσμένο πεδίο" #: documents/models.py:913 msgid "custom fields" -msgstr "" +msgstr "προσαρμοσμένα πεδία" #: documents/models.py:973 msgid "custom field instance" -msgstr "" +msgstr "στιγμιότυπο προσαρμοσμένου πεδίου" #: documents/models.py:974 msgid "custom field instances" -msgstr "" +msgstr "στιγμιότυπα προσαρμοσμένων πεδίων" #: documents/serialisers.py:102 #, python-format @@ -763,72 +763,72 @@ msgstr "Είσοδος" #: documents/templates/registration/login.html:70 msgid "Forgot your password?" -msgstr "" +msgstr "Ξεχάσατε τον κωδικό σας;" #: documents/templates/registration/password_reset_complete.html:14 msgid "Paperless-ngx reset password complete" -msgstr "" +msgstr "Η επαναφορά κωδικού paperless-ngx πραγματοποιήθηκε" #: documents/templates/registration/password_reset_complete.html:40 msgid "Password reset complete." -msgstr "" +msgstr "Ολοκλήρωση επαναφοράς κωδικού πρόσβασης." #: documents/templates/registration/password_reset_complete.html:42 #, python-format msgid "Your new password has been set. You can now log in" -msgstr "" +msgstr "Έχει οριστεί νέος κωδικός πρόσβασης. Μπορείτε τώρα να συνδεθείτε στο" #: documents/templates/registration/password_reset_confirm.html:14 msgid "Paperless-ngx reset password confirmation" -msgstr "" +msgstr "Επιβεβαίωση κωδικού paperless-ngx" #: documents/templates/registration/password_reset_confirm.html:42 msgid "Set a new password." -msgstr "" +msgstr "Ορίστε έναν νέο κωδικό πρόσβασης." #: documents/templates/registration/password_reset_confirm.html:46 msgid "Passwords did not match or too weak. Try again." -msgstr "" +msgstr "Οι κωδικοί πρόσβασης δεν ταιριάζουν ή είναι πολύ αδύναμοι. Δοκιμάστε ξανά." #: documents/templates/registration/password_reset_confirm.html:49 msgid "New Password" -msgstr "" +msgstr "Νέος Κωδικός" #: documents/templates/registration/password_reset_confirm.html:50 msgid "Confirm Password" -msgstr "" +msgstr "Επιβεβαίωση Κωδικού" #: documents/templates/registration/password_reset_confirm.html:61 msgid "Change my password" -msgstr "" +msgstr "Αλλαγή κωδικού πρόσβασης" #: documents/templates/registration/password_reset_confirm.html:65 msgid "request a new password reset" -msgstr "" +msgstr "αίτημα επαναφοράς νέου κωδικού πρόσβασης" #: documents/templates/registration/password_reset_done.html:14 msgid "Paperless-ngx reset password sent" -msgstr "" +msgstr "Επαναφορά κωδικού paperless-ngx εστάλη" #: documents/templates/registration/password_reset_done.html:40 msgid "Check your inbox." -msgstr "" +msgstr "Ελέγξτε τα εισερχόμενά σας." #: documents/templates/registration/password_reset_done.html:41 msgid "We've emailed you instructions for setting your password. You should receive the email shortly!" -msgstr "" +msgstr "Σας στείλαμε μήνυμα ηλεκτρονικού ταχυδρομείου με οδηγίες για τον ορισμό του κωδικού πρόσβασης σας. Θα πρέπει να το λάβετε σύντομα!" #: documents/templates/registration/password_reset_form.html:14 msgid "Paperless-ngx reset password request" -msgstr "" +msgstr "Αίτημα επαναφοράς κωδικού πρόσβασης Paperless-ngx" #: documents/templates/registration/password_reset_form.html:41 msgid "Enter your email address below, and we'll email instructions for setting a new one." -msgstr "" +msgstr "Εισάγετε το email σας παρακάτω και θα αποστείλουμε οδηγίες για τον ορισμό νέου." #: documents/templates/registration/password_reset_form.html:44 msgid "An error occurred. Please try again." -msgstr "" +msgstr "Παρουσιάστηκε σφάλμα. Παρακαλώ προσπαθήστε ξανά." #: documents/templates/registration/password_reset_form.html:47 msgid "Email" @@ -836,7 +836,7 @@ msgstr "E-mail" #: documents/templates/registration/password_reset_form.html:54 msgid "Send me instructions!" -msgstr "" +msgstr "Αποστολή Οδηγιών!" #: paperless/apps.py:10 msgid "Paperless" @@ -860,7 +860,7 @@ msgstr "Λευκορωσικά" #: paperless/settings.py:590 msgid "Bulgarian" -msgstr "" +msgstr "Βουλγαρικά" #: paperless/settings.py:591 msgid "Catalan" @@ -900,7 +900,7 @@ msgstr "Γαλλικά" #: paperless/settings.py:600 msgid "Hungarian" -msgstr "" +msgstr "Ουγγρικά" #: paperless/settings.py:601 msgid "Italian" @@ -1116,7 +1116,7 @@ msgstr "Χρήση ονόματος συνημμένου αρχείου ως τ #: paperless_mail/models.py:85 msgid "Do not assign title from rule" -msgstr "" +msgstr "Να μην αντιστοιχιστεί τίτλος από τον κανόνα" #: paperless_mail/models.py:88 msgid "Do not assign a correspondent" @@ -1208,7 +1208,7 @@ msgstr "ανάθεση ανταποκριτή από" #: paperless_mail/models.py:230 msgid "Assign the rule owner to documents" -msgstr "" +msgstr "Αναθέστε τον ιδιοκτήτη του κανόνα σε έγγραφα" #: paperless_mail/models.py:256 msgid "uid" diff --git a/src/locale/hu_HU/LC_MESSAGES/django.po b/src/locale/hu_HU/LC_MESSAGES/django.po index cafcce6ad..0656a4451 100644 --- a/src/locale/hu_HU/LC_MESSAGES/django.po +++ b/src/locale/hu_HU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-10 09:02-0800\n" -"PO-Revision-Date: 2023-11-13 01:30\n" +"PO-Revision-Date: 2023-12-01 13:52\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -43,7 +43,7 @@ msgstr "Pontos egyezés" #: documents/models.py:57 msgid "Regular expression" -msgstr "Szabályos kifejezés" +msgstr "Reguláris kifejezés" #: documents/models.py:58 msgid "Fuzzy word" @@ -64,7 +64,7 @@ msgstr "egyezés" #: documents/models.py:67 msgid "matching algorithm" -msgstr "megfelelő algoritmus" +msgstr "egyeztető algoritmus" #: documents/models.py:72 msgid "is insensitive" @@ -72,11 +72,11 @@ msgstr "érzéketlen" #: documents/models.py:95 documents/models.py:147 msgid "correspondent" -msgstr "levelező" +msgstr "kapcsolattartó" #: documents/models.py:96 msgid "correspondents" -msgstr "levelezők" +msgstr "kapcsolattartók" #: documents/models.py:100 msgid "color" @@ -553,7 +553,7 @@ msgstr "linkek megosztása" #: documents/models.py:748 msgid "Consume Folder" -msgstr "Fogyasztás mappa" +msgstr "Feldolgozási mappa" #: documents/models.py:749 msgid "Api Upload" @@ -597,7 +597,7 @@ msgstr "A dokumentum címének hozzárendelése, tartalmazhat néhány helykitö #: documents/models.py:808 paperless_mail/models.py:204 msgid "assign this tag" -msgstr "hozzárendelni ezt a címkét" +msgstr "rendelje hozzá ezt a jelölőt" #: documents/models.py:816 paperless_mail/models.py:212 msgid "assign this document type" @@ -605,7 +605,7 @@ msgstr "rendelje hozzá ezt a dokumentumtípust" #: documents/models.py:824 paperless_mail/models.py:226 msgid "assign this correspondent" -msgstr "bízza meg ezt a levelezőt" +msgstr "rendelje hozzá ezt a kapcsolattartót" #: documents/models.py:832 msgid "assign this storage path" @@ -613,7 +613,7 @@ msgstr "rendelje hozzá ezt a tárolási útvonalat" #: documents/models.py:841 msgid "assign this owner" -msgstr "kijelölni ezt a tulajdonost" +msgstr "rendelje hozzá ezt a tulajdonost" #: documents/models.py:848 msgid "grant view permissions to these users" @@ -1188,7 +1188,7 @@ msgstr "feldolgozási kör" #: paperless_mail/models.py:177 msgid "action" -msgstr "akció" +msgstr "művelet" #: paperless_mail/models.py:183 msgid "action parameter" @@ -1204,7 +1204,7 @@ msgstr "cím hozzárendelése a" #: paperless_mail/models.py:216 msgid "assign correspondent from" -msgstr "megbízott levelezőt a" +msgstr "rendelje hozzá a kapcsolattartót a" #: paperless_mail/models.py:230 msgid "Assign the rule owner to documents" @@ -1220,7 +1220,7 @@ msgstr "tárgy" #: paperless_mail/models.py:272 msgid "received" -msgstr "kapott" +msgstr "fogadott" #: paperless_mail/models.py:279 msgid "processed" @@ -1228,5 +1228,5 @@ msgstr "feldolgozott" #: paperless_mail/models.py:285 msgid "status" -msgstr "státusz" +msgstr "állapot" diff --git a/src/locale/pl_PL/LC_MESSAGES/django.po b/src/locale/pl_PL/LC_MESSAGES/django.po index ff28f8ef5..6b6caec3f 100644 --- a/src/locale/pl_PL/LC_MESSAGES/django.po +++ b/src/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-11-10 09:02-0800\n" -"PO-Revision-Date: 2023-11-13 01:31\n" +"PO-Revision-Date: 2023-12-01 11:18\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -521,7 +521,7 @@ msgstr "użytkownik" #: documents/models.py:679 msgid "note" -msgstr "" +msgstr "notatka" #: documents/models.py:680 msgid "notes" @@ -529,11 +529,11 @@ msgstr "notatki" #: documents/models.py:688 msgid "Archive" -msgstr "" +msgstr "Archiwum" #: documents/models.py:689 msgid "Original" -msgstr "" +msgstr "Oryginał" #: documents/models.py:700 msgid "expiration" @@ -657,7 +657,7 @@ msgstr "" #: documents/models.py:890 msgid "Integer" -msgstr "" +msgstr "Liczba całkowita" #: documents/models.py:891 msgid "Float" @@ -669,7 +669,7 @@ msgstr "" #: documents/models.py:904 msgid "data type" -msgstr "" +msgstr "typ danych" #: documents/models.py:912 msgid "custom field" @@ -763,7 +763,7 @@ msgstr "Zaloguj się" #: documents/templates/registration/login.html:70 msgid "Forgot your password?" -msgstr "" +msgstr "Nie pamiętasz hasła?" #: documents/templates/registration/password_reset_complete.html:14 msgid "Paperless-ngx reset password complete" @@ -792,7 +792,7 @@ msgstr "" #: documents/templates/registration/password_reset_confirm.html:49 msgid "New Password" -msgstr "" +msgstr "Nowe hasło" #: documents/templates/registration/password_reset_confirm.html:50 msgid "Confirm Password" @@ -800,11 +800,11 @@ msgstr "" #: documents/templates/registration/password_reset_confirm.html:61 msgid "Change my password" -msgstr "" +msgstr "Zmień hasło" #: documents/templates/registration/password_reset_confirm.html:65 msgid "request a new password reset" -msgstr "" +msgstr "poproś o reset hasła" #: documents/templates/registration/password_reset_done.html:14 msgid "Paperless-ngx reset password sent" From 76ac8883865e123bb48f80336cc0658f7d913249 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:44:33 -0800 Subject: [PATCH 20/34] Chore: Implement crowdin GHA (#4706) --- .github/workflows/crowdin.yml | 31 +++++++++++++++++++++++++++++++ crowdin.yml | 8 +++----- 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/crowdin.yml diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml new file mode 100644 index 000000000..050c83f26 --- /dev/null +++ b/.github/workflows/crowdin.yml @@ -0,0 +1,31 @@ +name: Crowdin Action + +on: + push: + paths: [ + 'src/locale/**', + 'src-ui/src/locale/**' + ] + branches: [ dev ] + +jobs: + synchronize-with-crowdin: + runs-on: ubuntu-latest + + steps: + + - name: Checkout + uses: actions/checkout@v4 + + - name: crowdin action + uses: crowdin/github-action@v1 + with: + upload_translations: false + download_translations: true + crowdin_branch_name: 'dev' + localization_branch_name: l10n_dev + pull_request_labels: 'skip-changelog, translation' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/crowdin.yml b/crowdin.yml index 0c5fc8c98..0118d6b6e 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,8 +1,6 @@ -commit_message: '[ci skip]' -pull_request_labels: [ - "skip-changelog", - "translation" -] +project_id_env: CROWDIN_PROJECT_ID +api_token_env: CROWDIN_PERSONAL_TOKEN +preserve_hierarchy: true files: - source: /src/locale/en_US/LC_MESSAGES/django.po translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po From 0b16c2db0372535d18e75267f0a26e4d7f4c812a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 1 Dec 2023 17:54:00 -0800 Subject: [PATCH 21/34] Update crowdin action triggers --- .github/workflows/crowdin.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 050c83f26..39b4cbb40 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -1,6 +1,9 @@ name: Crowdin Action on: + workflow_dispatch: + schedule: + - cron: '2 */1 * * *' push: paths: [ 'src/locale/**', @@ -10,6 +13,7 @@ on: jobs: synchronize-with-crowdin: + name: Crowdin Sync runs-on: ubuntu-latest steps: From 1a50d6bb8624a3dd419cadb48e4ee5416fd46ce6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 2 Dec 2023 02:04:16 +0000 Subject: [PATCH 22/34] Bump the actions group with 2 updates (#4745) Bumps the actions group with 2 updates: [actions/github-script](https://github.com/actions/github-script) and [stumpylog/image-cleaner-action](https://github.com/stumpylog/image-cleaner-action). Updates `actions/github-script` from 6 to 7 - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v6...v7) Updates `stumpylog/image-cleaner-action` from 0.3.0 to 0.4.0 - [Release notes](https://github.com/stumpylog/image-cleaner-action/releases) - [Changelog](https://github.com/stumpylog/image-cleaner-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/stumpylog/image-cleaner-action/compare/v0.3.0...v0.4.0) --- updated-dependencies: - dependency-name: actions/github-script dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: stumpylog/image-cleaner-action dependency-type: direct:production update-type: version-update:semver-minor dependency-group: actions ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- .github/workflows/cleanup-tags.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8fe34d40a..ad19726cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -643,7 +643,7 @@ jobs: git push origin ${{ needs.publish-release.outputs.version }}-changelog - name: Create Pull Request - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const { repo, owner } = context.repo; diff --git a/.github/workflows/cleanup-tags.yml b/.github/workflows/cleanup-tags.yml index e73ec62f3..5d3d0604c 100644 --- a/.github/workflows/cleanup-tags.yml +++ b/.github/workflows/cleanup-tags.yml @@ -33,7 +33,7 @@ jobs: - name: Clean temporary images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/ephemeral@v0.3.0 + uses: stumpylog/image-cleaner-action/ephemeral@v0.4.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" @@ -61,7 +61,7 @@ jobs: - name: Clean untagged images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/untagged@v0.3.0 + uses: stumpylog/image-cleaner-action/untagged@v0.4.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" From 20f27fe32ffe144813d6c69e3326bf230a2da52a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:05:43 -0800 Subject: [PATCH 23/34] Remove the pngx .env file for crowdin action --- .github/workflows/crowdin.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 39b4cbb40..d509787d5 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -17,10 +17,12 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout uses: actions/checkout@v4 - + - name: Remove .env + run: | + rm -f \ + .env - name: crowdin action uses: crowdin/github-action@v1 with: From 4ca1503beb1c65eb4f77ac992b4b3ea74fbc6fd4 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 2 Dec 2023 07:47:57 -0800 Subject: [PATCH 24/34] Fix: Limit global drag-drop to events with files (#4767) --- .../components/file-drop/file-drop.component.spec.ts | 12 +++++++++--- .../app/components/file-drop/file-drop.component.ts | 5 +++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src-ui/src/app/components/file-drop/file-drop.component.spec.ts b/src-ui/src/app/components/file-drop/file-drop.component.spec.ts index ec86ff2b2..d35bf54d9 100644 --- a/src-ui/src/app/components/file-drop/file-drop.component.spec.ts +++ b/src-ui/src/app/components/file-drop/file-drop.component.spec.ts @@ -84,7 +84,9 @@ describe('FileDropComponent', () => { it('should support drag drop, initiate upload', fakeAsync(() => { jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) expect(component.fileIsOver).toBeFalsy() - component.onDragOver(new Event('dragover') as DragEvent) + const overEvent = new Event('dragover') as DragEvent + ;(overEvent as any).dataTransfer = { types: ['Files'] } + component.onDragOver(overEvent) tick(1) fixture.detectChanges() expect(component.fileIsOver).toBeTruthy() @@ -151,7 +153,9 @@ describe('FileDropComponent', () => { const leaveSpy = jest.spyOn(component, 'onDragLeave') jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) settingsService.globalDropzoneEnabled = true - component.onDragOver(new Event('dragover') as DragEvent) + const overEvent = new Event('dragover') as DragEvent + ;(overEvent as any).dataTransfer = { types: ['Files'] } + component.onDragOver(overEvent) tick(1) expect(component.hidden).toBeFalsy() expect(component.fileIsOver).toBeTruthy() @@ -165,7 +169,9 @@ describe('FileDropComponent', () => { const leaveSpy = jest.spyOn(component, 'onDragLeave') jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) settingsService.globalDropzoneEnabled = true - component.onDragOver(new Event('dragover') as DragEvent) + const overEvent = new Event('dragover') as DragEvent + ;(overEvent as any).dataTransfer = { types: ['Files'] } + component.onDragOver(overEvent) tick(1) expect(component.hidden).toBeFalsy() expect(component.fileIsOver).toBeTruthy() diff --git a/src-ui/src/app/components/file-drop/file-drop.component.ts b/src-ui/src/app/components/file-drop/file-drop.component.ts index 0c9637b79..e45d816b0 100644 --- a/src-ui/src/app/components/file-drop/file-drop.component.ts +++ b/src-ui/src/app/components/file-drop/file-drop.component.ts @@ -38,8 +38,9 @@ export class FileDropComponent { @ViewChild('ngxFileDrop') ngxFileDrop: NgxFileDropComponent - @HostListener('dragover', ['$event ']) onDragOver(event: DragEvent) { - if (!this.dragDropEnabled) return + @HostListener('dragover', ['$event']) onDragOver(event: DragEvent) { + if (!this.dragDropEnabled || !event.dataTransfer?.types?.includes('Files')) + return event.preventDefault() event.stopImmediatePropagation() this.settings.globalDropzoneActive = true From 5a20c8e512a7c8a45c26eed5f9e0cf3b1bb04661 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 2 Dec 2023 07:56:56 -0800 Subject: [PATCH 25/34] Fix version checker GitHub api url (#4773) --- src/documents/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/views.py b/src/documents/views.py index 386f87404..92d37adf5 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1158,8 +1158,8 @@ class RemoteVersionView(GenericAPIView): current_version = packaging_version.parse(version.__full_version_str__) try: req = urllib.request.Request( - "https://api.github.com/repos/paperlessngx/" - "paperlessngx/releases/latest", + "https://api.github.com/repos/paperless-ngx/" + "paperless-ngx/releases/latest", ) # Ensure a JSON response req.add_header("Accept", "application/json") From 1b69b89d2dd4ec021aa6e3bceb175340cdd4e0ff Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 2 Dec 2023 08:24:17 -0800 Subject: [PATCH 26/34] Chore: Remove unneeded .env entry, revert crowdin action rm, reduce frequency --- .env | 1 - .github/workflows/crowdin.yml | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.env b/.env index 46f557886..0bd5be6ff 100644 --- a/.env +++ b/.env @@ -1,2 +1 @@ COMPOSE_PROJECT_NAME=paperless -export PROMPT="(pipenv-projectname)$P$G" diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index d509787d5..11dc0b36a 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -3,7 +3,7 @@ name: Crowdin Action on: workflow_dispatch: schedule: - - cron: '2 */1 * * *' + - cron: '2 */12 * * *' push: paths: [ 'src/locale/**', @@ -19,10 +19,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Remove .env - run: | - rm -f \ - .env - name: crowdin action uses: crowdin/github-action@v1 with: From 6e371ac5ac2227a6bdef5e15483f5b478ba78c4d Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Sat, 2 Dec 2023 08:26:19 -0800 Subject: [PATCH 27/34] Enhancement: Allow excluding mail attachments by name (#4691) * Adds new filtering to exclude attachments from processing * Frontend use include / exclude mail rule filename filters --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src-ui/messages.xlf | 42 ++++++---- .../mail-rule-edit-dialog.component.html | 3 +- .../mail-rule-edit-dialog.component.ts | 3 +- src-ui/src/app/data/paperless-mail-rule.ts | 4 +- .../services/rest/mail-rule.service.spec.ts | 9 ++- src/documents/tests/test_api.py | 2 +- .../tests/test_consumption_templates.py | 2 +- src/paperless_mail/admin.py | 3 +- src/paperless_mail/mail.py | 21 ++++- ...ule_filter_attachment_filename_and_more.py | 29 +++++++ src/paperless_mail/models.py | 16 +++- src/paperless_mail/serialisers.py | 3 +- src/paperless_mail/tests/test_api.py | 16 ++-- src/paperless_mail/tests/test_mail.py | 81 ++++++++++++++++--- 14 files changed, 189 insertions(+), 45 deletions(-) create mode 100644 src/paperless_mail/migrations/0023_remove_mailrule_filter_attachment_filename_and_more.py diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index f80457c42..f101ae0f3 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -1315,7 +1315,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 42 + 43 src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html @@ -2520,7 +2520,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 32 + 33 @@ -2531,7 +2531,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 34 + 35 @@ -2570,7 +2570,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 40 + 41 src/app/components/common/toasts/toasts.component.html @@ -2605,7 +2605,7 @@ src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 41 + 42 src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html @@ -3016,8 +3016,8 @@ 23 - - Filter attachment filename + + Filter attachment filename includes src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html 24 @@ -3030,53 +3030,67 @@ 24 + + Filter attachment filename excluding + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + + + Do not consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive. + + src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html + 25 + + Action src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 27 + 28 Action is only performed when documents are consumed from the mail. Mails without attachments remain entirely untouched. src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 27 + 28 Action parameter src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 28 + 29 Assignments specified here will supersede any consumption templates. src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 29 + 30 Assign title from src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 30 + 31 Assign correspondent from src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 33 + 34 Assign owner from rule src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html - 35 + 36 diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html index afbcc5c8d..5c335fdaa 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -21,7 +21,8 @@ - + +
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index 1de036847..2d9469f9e 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -158,7 +158,8 @@ export class MailRuleEditDialogComponent extends EditDialogComponent Date: Sat, 2 Dec 2023 08:26:42 -0800 Subject: [PATCH 28/34] Feature: update user profile (#4678) --- docs/api.md | 7 +- src-ui/messages.xlf | 261 +++++++++++++----- src-ui/src/app/app.module.ts | 2 + .../users-groups/users-groups.component.ts | 2 +- .../app-frame/app-frame.component.html | 5 + .../app-frame/app-frame.component.spec.ts | 15 +- .../app-frame/app-frame.component.ts | 10 + .../input/password/password.component.html | 11 +- .../input/password/password.component.spec.ts | 23 ++ .../input/password/password.component.ts | 31 ++- .../common/input/text/text.component.html | 2 +- .../common/input/text/text.component.ts | 5 +- .../profile-edit-dialog.component.html | 56 ++++ .../profile-edit-dialog.component.scss | 9 + .../profile-edit-dialog.component.spec.ts | 222 +++++++++++++++ .../profile-edit-dialog.component.ts | 184 ++++++++++++ src-ui/src/app/data/user-profile.ts | 7 + .../src/app/services/profile.service.spec.ts | 54 ++++ src-ui/src/app/services/profile.service.ts | 34 +++ src/documents/tests/test_api_profile.py | 105 +++++++ src/paperless/serialisers.py | 16 ++ src/paperless/urls.py | 8 + src/paperless/views.py | 54 ++++ 23 files changed, 1048 insertions(+), 75 deletions(-) create mode 100644 src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html create mode 100644 src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.scss create mode 100644 src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.spec.ts create mode 100644 src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts create mode 100644 src-ui/src/app/data/user-profile.ts create mode 100644 src-ui/src/app/services/profile.service.spec.ts create mode 100644 src-ui/src/app/services/profile.service.ts create mode 100644 src/documents/tests/test_api_profile.py diff --git a/docs/api.md b/docs/api.md index 0eacd7913..8096b84e9 100644 --- a/docs/api.md +++ b/docs/api.md @@ -21,6 +21,7 @@ The API provides the following main endpoints: - `/api/groups/`: Full CRUD support. - `/api/share_links/`: Full CRUD support. - `/api/custom_fields/`: Full CRUD support. +- `/api/profile/`: GET, PATCH All of these endpoints except for the logging endpoint allow you to fetch (and edit and delete where appropriate) individual objects by @@ -157,6 +158,10 @@ The REST api provides three different forms of authentication. 3. Token authentication + You can create (or re-create) an API token by opening the "My Profile" + link in the user dropdown found in the web UI and clicking the circular + arrow button. + Paperless also offers an endpoint to acquire authentication tokens. POST a username and password as a form or json string to @@ -168,7 +173,7 @@ The REST api provides three different forms of authentication. Authorization: Token ``` - Tokens can be managed and revoked in the paperless admin. + Tokens can also be managed in the Django admin. ## Searching for documents diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index f101ae0f3..1b94018f3 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -403,11 +403,11 @@ src/app/components/app-frame/app-frame.component.html - 225 + 230 src/app/components/app-frame/app-frame.component.html - 228 + 233 @@ -496,15 +496,15 @@ src/app/components/app-frame/app-frame.component.html - 45 + 50 src/app/components/app-frame/app-frame.component.html - 203 + 208 src/app/components/app-frame/app-frame.component.html - 206 + 211 @@ -973,7 +973,7 @@ src/app/components/app-frame/app-frame.component.html - 91 + 96 @@ -1329,6 +1329,10 @@ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html 36 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 54 + src/app/components/document-detail/document-detail.component.html 93 @@ -1396,7 +1400,7 @@ src/app/components/app-frame/app-frame.component.ts - 119 + 116 @@ -1428,7 +1432,7 @@ src/app/components/app-frame/app-frame.component.html - 217 + 222 @@ -1630,11 +1634,11 @@ src/app/components/app-frame/app-frame.component.html - 210 + 215 src/app/components/app-frame/app-frame.component.html - 213 + 218 @@ -1780,6 +1784,10 @@ src/app/components/admin/users-groups/users-groups.component.ts 89 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 144 + Saved user "". @@ -1961,37 +1969,44 @@ 39 + + My Profile + + src/app/components/app-frame/app-frame.component.html + 45 + + Logout src/app/components/app-frame/app-frame.component.html - 50 + 55 Documentation src/app/components/app-frame/app-frame.component.html - 56 + 61 src/app/components/app-frame/app-frame.component.html - 232 + 237 src/app/components/app-frame/app-frame.component.html - 235 + 240 Dashboard src/app/components/app-frame/app-frame.component.html - 75 + 80 src/app/components/app-frame/app-frame.component.html - 78 + 83 src/app/components/dashboard/dashboard.component.html @@ -2002,11 +2017,11 @@ Documents src/app/components/app-frame/app-frame.component.html - 82 + 87 src/app/components/app-frame/app-frame.component.html - 85 + 90 src/app/components/document-list/document-list.component.ts @@ -2033,36 +2048,36 @@ Open documents src/app/components/app-frame/app-frame.component.html - 118 + 123 Close all src/app/components/app-frame/app-frame.component.html - 134 + 139 src/app/components/app-frame/app-frame.component.html - 137 + 142 Manage src/app/components/app-frame/app-frame.component.html - 144 + 149 Correspondents src/app/components/app-frame/app-frame.component.html - 148 + 153 src/app/components/app-frame/app-frame.component.html - 151 + 156 src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html @@ -2073,11 +2088,11 @@ Tags src/app/components/app-frame/app-frame.component.html - 155 + 160 src/app/components/app-frame/app-frame.component.html - 158 + 163 src/app/components/common/input/tags/tags.component.ts @@ -2104,11 +2119,11 @@ Document Types src/app/components/app-frame/app-frame.component.html - 162 + 167 src/app/components/app-frame/app-frame.component.html - 165 + 170 src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html @@ -2119,11 +2134,11 @@ Storage Paths src/app/components/app-frame/app-frame.component.html - 169 + 174 src/app/components/app-frame/app-frame.component.html - 172 + 177 src/app/components/dashboard/widgets/statistics-widget/statistics-widget.component.html @@ -2134,11 +2149,11 @@ Custom Fields src/app/components/app-frame/app-frame.component.html - 176 + 181 src/app/components/app-frame/app-frame.component.html - 179 + 184 src/app/components/common/custom-fields-dropdown/custom-fields-dropdown.component.html @@ -2153,102 +2168,102 @@ Consumption templates src/app/components/app-frame/app-frame.component.html - 183 + 188 Templates src/app/components/app-frame/app-frame.component.html - 186 + 191 Mail src/app/components/app-frame/app-frame.component.html - 190 + 195 src/app/components/app-frame/app-frame.component.html - 193 + 198 Administration src/app/components/app-frame/app-frame.component.html - 199 + 204 File Tasks src/app/components/app-frame/app-frame.component.html - 221 + 226 GitHub src/app/components/app-frame/app-frame.component.html - 241 + 246 is available. src/app/components/app-frame/app-frame.component.html - 247 + 252 Click to view. src/app/components/app-frame/app-frame.component.html - 247 + 252 Paperless-ngx can automatically check for updates src/app/components/app-frame/app-frame.component.html - 251 + 256 How does this work? src/app/components/app-frame/app-frame.component.html - 258,260 + 263,265 Update available src/app/components/app-frame/app-frame.component.html - 269 + 274 Sidebar views updated src/app/components/app-frame/app-frame.component.ts - 247 + 252 Error updating sidebar views src/app/components/app-frame/app-frame.component.ts - 250 + 255 An error occurred while saving update checking settings. src/app/components/app-frame/app-frame.component.ts - 271 + 276 @@ -2623,6 +2638,10 @@ src/app/components/common/permissions-dialog/permissions-dialog.component.html 20 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 53 + src/app/components/common/select-dialog/select-dialog.component.html 12 @@ -2843,6 +2862,10 @@ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html 12 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 18 + Password is token @@ -3307,6 +3330,10 @@ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html 11 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 8 + First name @@ -3314,6 +3341,10 @@ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html 13 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 28 + Last name @@ -3321,6 +3352,10 @@ src/app/components/common/edit-dialog/user-edit-dialog/user-edit-dialog.component.html 14 + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 29 + Active @@ -3483,6 +3518,13 @@ 155 + + Show password + + src/app/components/common/input/password/password.component.html + 5 + + Edit Permissions @@ -3637,6 +3679,109 @@ 61 + + Edit Profile + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 3 + + + + Confirm Email + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 13 + + + + Confirm Password + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 23 + + + + API Auth Token + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 31 + + + + Copy + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 35 + + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 39 + + + src/app/components/common/share-links-dropdown/share-links-dropdown.component.html + 23 + + + + Regenerate auth token + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 41 + + + + Copied! + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 47 + + + src/app/components/common/share-links-dropdown/share-links-dropdown.component.html + 36 + + + + Warning: changing the token cannot be undone + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html + 49 + + + + Emails must match + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 94 + + + + Passwords must match + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 122 + + + + Profile updated successfully + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 141 + + + + Error saving profile + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 153 + + + + Error generating auth token + + src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts + 170 + + Select @@ -3677,13 +3822,6 @@ 10,12 - - Copy - - src/app/components/common/share-links-dropdown/share-links-dropdown.component.html - 23 - - Share @@ -3691,13 +3829,6 @@ 28 - - Copied! - - src/app/components/common/share-links-dropdown/share-links-dropdown.component.html - 36 - - Share archive version @@ -3727,7 +3858,7 @@ src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 90 + 93 @@ -3762,21 +3893,21 @@ days src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 90 + 93 Error deleting link src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 117 + 120 Error creating link src/app/components/common/share-links-dropdown/share-links-dropdown.component.ts - 145 + 148 diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index e3cef8c95..684cf6d18 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -105,6 +105,7 @@ import { FileDropComponent } from './components/file-drop/file-drop.component' import { CustomFieldsComponent } from './components/manage/custom-fields/custom-fields.component' import { CustomFieldEditDialogComponent } from './components/common/edit-dialog/custom-field-edit-dialog/custom-field-edit-dialog.component' import { CustomFieldsDropdownComponent } from './components/common/custom-fields-dropdown/custom-fields-dropdown.component' +import { ProfileEditDialogComponent } from './components/common/profile-edit-dialog/profile-edit-dialog.component' import localeAf from '@angular/common/locales/af' import localeAr from '@angular/common/locales/ar' @@ -256,6 +257,7 @@ function initializeApp(settings: SettingsService) { CustomFieldsComponent, CustomFieldEditDialogComponent, CustomFieldsDropdownComponent, + ProfileEditDialogComponent, ], imports: [ BrowserModule, diff --git a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts index a9ce1d600..8f1751092 100644 --- a/src-ui/src/app/components/admin/users-groups/users-groups.component.ts +++ b/src-ui/src/app/components/admin/users-groups/users-groups.component.ts @@ -89,7 +89,7 @@ export class UsersAndGroupsComponent $localize`Password has been changed, you will be logged out momentarily.` ) setTimeout(() => { - window.location.href = `${window.location.origin}/accounts/logout/?next=/accounts/login/` + window.location.href = `${window.location.origin}/accounts/logout/?next=/accounts/login/?next=/` }, 2500) } else { this.toastService.showInfo( diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index a710600ef..556252670 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -39,6 +39,11 @@

Logged in as {{this.settingsService.displayName}}

+ diff --git a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts index 7b8bf4bce..152429358 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts @@ -9,7 +9,7 @@ import { fakeAsync, tick, } from '@angular/core/testing' -import { NgbModule } from '@ng-bootstrap/ng-bootstrap' +import { NgbModal, NgbModalModule, NgbModule } from '@ng-bootstrap/ng-bootstrap' import { BrowserModule } from '@angular/platform-browser' import { RouterTestingModule } from '@angular/router/testing' import { SettingsService } from 'src/app/services/settings.service' @@ -32,6 +32,7 @@ import { routes } from 'src/app/app-routing.module' import { PermissionsGuard } from 'src/app/guards/permissions.guard' import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop' import { PaperlessSavedView } from 'src/app/data/paperless-saved-view' +import { ProfileEditDialogComponent } from '../common/profile-edit-dialog/profile-edit-dialog.component' const saved_views = [ { @@ -86,6 +87,7 @@ describe('AppFrameComponent', () => { let documentListViewService: DocumentListViewService let router: Router let savedViewSpy + let modalService: NgbModal beforeEach(async () => { TestBed.configureTestingModule({ @@ -98,6 +100,7 @@ describe('AppFrameComponent', () => { FormsModule, ReactiveFormsModule, DragDropModule, + NgbModalModule, ], providers: [ SettingsService, @@ -120,6 +123,7 @@ describe('AppFrameComponent', () => { ToastService, OpenDocumentsService, SearchService, + NgbModal, { provide: ActivatedRoute, useValue: { @@ -148,6 +152,7 @@ describe('AppFrameComponent', () => { openDocumentsService = TestBed.inject(OpenDocumentsService) searchService = TestBed.inject(SearchService) documentListViewService = TestBed.inject(DocumentListViewService) + modalService = TestBed.inject(NgbModal) router = TestBed.inject(Router) jest @@ -363,4 +368,12 @@ describe('AppFrameComponent', () => { >) expect(toastSpy).toHaveBeenCalled() }) + + it('should support edit profile', () => { + const modalSpy = jest.spyOn(modalService, 'open') + component.editProfile() + expect(modalSpy).toHaveBeenCalledWith(ProfileEditDialogComponent, { + backdrop: 'static', + }) + }) }) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 0c8f149c1..f346dc089 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -39,6 +39,8 @@ import { CdkDragDrop, moveItemInArray, } from '@angular/cdk/drag-drop' +import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { ProfileEditDialogComponent } from '../common/profile-edit-dialog/profile-edit-dialog.component' @Component({ selector: 'pngx-app-frame', @@ -69,6 +71,7 @@ export class AppFrameComponent public settingsService: SettingsService, public tasksService: TasksService, private readonly toastService: ToastService, + private modalService: NgbModal, permissionsService: PermissionsService ) { super() @@ -121,6 +124,13 @@ export class AppFrameComponent this.isMenuCollapsed = true } + editProfile() { + this.modalService.open(ProfileEditDialogComponent, { + backdrop: 'static', + }) + this.closeMenu() + } + get openDocuments(): PaperlessDocument[] { return this.openDocumentsService.getOpenDocuments() } diff --git a/src-ui/src/app/components/common/input/password/password.component.html b/src-ui/src/app/components/common/input/password/password.component.html index 57cdd6de8..dc285ac7b 100644 --- a/src-ui/src/app/components/common/input/password/password.component.html +++ b/src-ui/src/app/components/common/input/password/password.component.html @@ -1,8 +1,15 @@
- - +
+ + +
{{error}}
+
diff --git a/src-ui/src/app/components/common/input/password/password.component.spec.ts b/src-ui/src/app/components/common/input/password/password.component.spec.ts index 80ad853d7..1788104a6 100644 --- a/src-ui/src/app/components/common/input/password/password.component.spec.ts +++ b/src-ui/src/app/components/common/input/password/password.component.spec.ts @@ -5,6 +5,7 @@ import { NG_VALUE_ACCESSOR, } from '@angular/forms' import { PasswordComponent } from './password.component' +import { By } from '@angular/platform-browser' describe('PasswordComponent', () => { let component: PasswordComponent @@ -33,4 +34,26 @@ describe('PasswordComponent', () => { // fixture.detectChanges() // expect(component.value).toEqual('foo') }) + + it('should support toggling field visibility', () => { + expect(input.type).toEqual('password') + component.showReveal = true + fixture.detectChanges() + fixture.debugElement.query(By.css('button')).triggerEventHandler('click') + fixture.detectChanges() + expect(input.type).toEqual('text') + }) + + it('should empty field if password is obfuscated on focus', () => { + component.value = '*********' + component.onFocus() + expect(component.value).toEqual('') + component.onFocusOut() + expect(component.value).toEqual('**********') + }) + + it('should disable toggle button if no real password', () => { + component.value = '*********' + expect(component.disableRevealToggle).toBeTruthy() + }) }) diff --git a/src-ui/src/app/components/common/input/password/password.component.ts b/src-ui/src/app/components/common/input/password/password.component.ts index ce0284a77..26f5a94e8 100644 --- a/src-ui/src/app/components/common/input/password/password.component.ts +++ b/src-ui/src/app/components/common/input/password/password.component.ts @@ -1,4 +1,4 @@ -import { Component, forwardRef } from '@angular/core' +import { Component, Input, forwardRef } from '@angular/core' import { NG_VALUE_ACCESSOR } from '@angular/forms' import { AbstractInputComponent } from '../abstract-input' @@ -15,7 +15,32 @@ import { AbstractInputComponent } from '../abstract-input' styleUrls: ['./password.component.scss'], }) export class PasswordComponent extends AbstractInputComponent { - constructor() { - super() + @Input() + showReveal: boolean = false + + @Input() + autocomplete: string + + public textVisible: boolean = false + + public toggleVisibility(): void { + this.textVisible = !this.textVisible + } + + public onFocus() { + if (this.value?.replace(/\*/g, '').length === 0) { + this.writeValue('') + } + } + + public onFocusOut() { + if (this.value?.length === 0) { + this.writeValue('**********') + this.onChange(this.value) + } + } + + get disableRevealToggle(): boolean { + return this.value?.replace(/\*/g, '').length === 0 } } diff --git a/src-ui/src/app/components/common/input/text/text.component.html b/src-ui/src/app/components/common/input/text/text.component.html index 98714e553..47ec804c6 100644 --- a/src-ui/src/app/components/common/input/text/text.component.html +++ b/src-ui/src/app/components/common/input/text/text.component.html @@ -9,7 +9,7 @@
- +
{{error}} diff --git a/src-ui/src/app/components/common/input/text/text.component.ts b/src-ui/src/app/components/common/input/text/text.component.ts index 4060977d4..a546e2e39 100644 --- a/src-ui/src/app/components/common/input/text/text.component.ts +++ b/src-ui/src/app/components/common/input/text/text.component.ts @@ -1,4 +1,4 @@ -import { Component, forwardRef } from '@angular/core' +import { Component, Input, forwardRef } from '@angular/core' import { NG_VALUE_ACCESSOR } from '@angular/forms' import { AbstractInputComponent } from '../abstract-input' @@ -15,6 +15,9 @@ import { AbstractInputComponent } from '../abstract-input' styleUrls: ['./text.component.scss'], }) export class TextComponent extends AbstractInputComponent { + @Input() + autocomplete: string + constructor() { super() } diff --git a/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html new file mode 100644 index 000000000..b6423b796 --- /dev/null +++ b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.html @@ -0,0 +1,56 @@ +
+ + + +
diff --git a/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.scss b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.scss new file mode 100644 index 000000000..62eb6b8cf --- /dev/null +++ b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.scss @@ -0,0 +1,9 @@ +::ng-deep { + .accordion-body .mb-3 { + margin: 0 !important; // hack-ish, for animation + } +} + +.copied-badge { + right: 8em; +} diff --git a/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.spec.ts b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.spec.ts new file mode 100644 index 000000000..0b300bd74 --- /dev/null +++ b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.spec.ts @@ -0,0 +1,222 @@ +import { + ComponentFixture, + TestBed, + fakeAsync, + tick, +} from '@angular/core/testing' + +import { ProfileEditDialogComponent } from './profile-edit-dialog.component' +import { ProfileService } from 'src/app/services/profile.service' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { + NgbAccordionModule, + NgbActiveModal, + NgbModal, + NgbModalModule, +} from '@ng-bootstrap/ng-bootstrap' +import { HttpClientModule } from '@angular/common/http' +import { TextComponent } from '../input/text/text.component' +import { PasswordComponent } from '../input/password/password.component' +import { of, throwError } from 'rxjs' +import { ToastService } from 'src/app/services/toast.service' +import { Clipboard } from '@angular/cdk/clipboard' + +const profile = { + email: 'foo@bar.com', + password: '*********', + first_name: 'foo', + last_name: 'bar', + auth_token: '123456789abcdef', +} + +describe('ProfileEditDialogComponent', () => { + let component: ProfileEditDialogComponent + let fixture: ComponentFixture + let profileService: ProfileService + let toastService: ToastService + let clipboard: Clipboard + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + ProfileEditDialogComponent, + TextComponent, + PasswordComponent, + ], + providers: [NgbActiveModal], + imports: [ + HttpClientModule, + ReactiveFormsModule, + FormsModule, + NgbModalModule, + NgbAccordionModule, + ], + }) + profileService = TestBed.inject(ProfileService) + toastService = TestBed.inject(ToastService) + clipboard = TestBed.inject(Clipboard) + fixture = TestBed.createComponent(ProfileEditDialogComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should get profile on init, display in form', () => { + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + component.ngOnInit() + expect(getSpy).toHaveBeenCalled() + fixture.detectChanges() + expect(component.form.get('email').value).toEqual(profile.email) + }) + + it('should update profile on save, display error if needed', () => { + const newProfile = { + email: 'foo@bar2.com', + password: profile.password, + first_name: 'foo2', + last_name: profile.last_name, + auth_token: profile.auth_token, + } + const updateSpy = jest.spyOn(profileService, 'update') + const errorSpy = jest.spyOn(toastService, 'showError') + updateSpy.mockReturnValueOnce(throwError(() => new Error('failed to save'))) + component.save() + expect(errorSpy).toHaveBeenCalled() + + updateSpy.mockClear() + const infoSpy = jest.spyOn(toastService, 'showInfo') + component.form.patchValue(newProfile) + updateSpy.mockReturnValueOnce(of(newProfile)) + component.save() + expect(updateSpy).toHaveBeenCalledWith(newProfile) + expect(infoSpy).toHaveBeenCalled() + }) + + it('should close on cancel', () => { + const closeSpy = jest.spyOn(component.activeModal, 'close') + component.cancel() + expect(closeSpy).toHaveBeenCalled() + }) + + it('should show additional confirmation field when email changes, warn with error & disable save', () => { + expect(component.form.get('email_confirm').enabled).toBeFalsy() + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + component.ngOnInit() + component.form.get('email').patchValue('foo@bar2.com') + component.onEmailKeyUp({ target: { value: 'foo@bar2.com' } } as any) + fixture.detectChanges() + expect(component.form.get('email_confirm').enabled).toBeTruthy() + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'Emails must match' + ) + expect(component.saveDisabled).toBeTruthy() + + component.form.get('email_confirm').patchValue('foo@bar2.com') + component.onEmailConfirmKeyUp({ target: { value: 'foo@bar2.com' } } as any) + fixture.detectChanges() + expect(fixture.debugElement.nativeElement.textContent).not.toContain( + 'Emails must match' + ) + expect(component.saveDisabled).toBeFalsy() + + component.form.get('email').patchValue(profile.email) + fixture.detectChanges() + expect(component.form.get('email_confirm').enabled).toBeFalsy() + expect(fixture.debugElement.nativeElement.textContent).not.toContain( + 'Emails must match' + ) + expect(component.saveDisabled).toBeFalsy() + }) + + it('should show additional confirmation field when password changes, warn with error & disable save', () => { + expect(component.form.get('password_confirm').enabled).toBeFalsy() + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + component.ngOnInit() + component.form.get('password').patchValue('new*pass') + component.onPasswordKeyUp({ + target: { value: 'new*pass', tagName: 'input' }, + } as any) + component.onPasswordKeyUp({ target: { tagName: 'button' } } as any) // coverage + fixture.detectChanges() + expect(component.form.get('password_confirm').enabled).toBeTruthy() + expect(fixture.debugElement.nativeElement.textContent).toContain( + 'Passwords must match' + ) + expect(component.saveDisabled).toBeTruthy() + + component.form.get('password_confirm').patchValue('new*pass') + component.onPasswordConfirmKeyUp({ target: { value: 'new*pass' } } as any) + fixture.detectChanges() + expect(fixture.debugElement.nativeElement.textContent).not.toContain( + 'Passwords must match' + ) + expect(component.saveDisabled).toBeFalsy() + + component.form.get('password').patchValue(profile.password) + fixture.detectChanges() + expect(component.form.get('password_confirm').enabled).toBeFalsy() + expect(fixture.debugElement.nativeElement.textContent).not.toContain( + 'Passwords must match' + ) + expect(component.saveDisabled).toBeFalsy() + }) + + it('should logout on save if password changed', fakeAsync(() => { + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + component.ngOnInit() + component['newPassword'] = 'new*pass' + component.form.get('password').patchValue('new*pass') + component.form.get('password_confirm').patchValue('new*pass') + + const updateSpy = jest.spyOn(profileService, 'update') + updateSpy.mockReturnValue(of(null)) + Object.defineProperty(window, 'location', { + value: { + href: 'http://localhost/', + }, + writable: true, // possibility to override + }) + component.save() + expect(updateSpy).toHaveBeenCalled() + tick(2600) + expect(window.location.href).toContain('logout') + })) + + it('should support auth token copy', fakeAsync(() => { + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + component.ngOnInit() + const copySpy = jest.spyOn(clipboard, 'copy') + component.copyAuthToken() + expect(copySpy).toHaveBeenCalledWith(profile.auth_token) + expect(component.copied).toBeTruthy() + tick(3000) + expect(component.copied).toBeFalsy() + })) + + it('should support generate token, display error if needed', () => { + const getSpy = jest.spyOn(profileService, 'get') + getSpy.mockReturnValue(of(profile)) + + const generateSpy = jest.spyOn(profileService, 'generateAuthToken') + const errorSpy = jest.spyOn(toastService, 'showError') + generateSpy.mockReturnValueOnce( + throwError(() => new Error('failed to generate')) + ) + component.generateAuthToken() + expect(errorSpy).toHaveBeenCalled() + + generateSpy.mockClear() + const newToken = '789101112hijk' + generateSpy.mockReturnValueOnce(of(newToken)) + component.generateAuthToken() + expect(generateSpy).toHaveBeenCalled() + expect(component.form.get('auth_token').value).not.toEqual( + profile.auth_token + ) + expect(component.form.get('auth_token').value).toEqual(newToken) + }) +}) diff --git a/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts new file mode 100644 index 000000000..19391ce28 --- /dev/null +++ b/src-ui/src/app/components/common/profile-edit-dialog/profile-edit-dialog.component.ts @@ -0,0 +1,184 @@ +import { Component, OnDestroy, OnInit } from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap' +import { ProfileService } from 'src/app/services/profile.service' +import { ToastService } from 'src/app/services/toast.service' +import { Subject, takeUntil } from 'rxjs' +import { Clipboard } from '@angular/cdk/clipboard' + +@Component({ + selector: 'pngx-profile-edit-dialog', + templateUrl: './profile-edit-dialog.component.html', + styleUrls: ['./profile-edit-dialog.component.scss'], +}) +export class ProfileEditDialogComponent implements OnInit, OnDestroy { + public networkActive: boolean = false + public error: any + private unsubscribeNotifier: Subject = new Subject() + + public form = new FormGroup({ + email: new FormControl(''), + email_confirm: new FormControl({ value: null, disabled: true }), + password: new FormControl(null), + password_confirm: new FormControl({ value: null, disabled: true }), + first_name: new FormControl(''), + last_name: new FormControl(''), + auth_token: new FormControl(''), + }) + + private currentPassword: string + private newPassword: string + private passwordConfirm: string + public showPasswordConfirm: boolean = false + + private currentEmail: string + private newEmail: string + private emailConfirm: string + public showEmailConfirm: boolean = false + + public copied: boolean = false + + constructor( + private profileService: ProfileService, + public activeModal: NgbActiveModal, + private toastService: ToastService, + private clipboard: Clipboard + ) {} + + ngOnInit(): void { + this.networkActive = true + this.profileService + .get() + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe((profile) => { + this.networkActive = false + this.form.patchValue(profile) + this.currentEmail = profile.email + this.form.get('email').valueChanges.subscribe((newEmail) => { + this.newEmail = newEmail + this.onEmailChange() + }) + this.currentPassword = profile.password + this.form.get('password').valueChanges.subscribe((newPassword) => { + this.newPassword = newPassword + this.onPasswordChange() + }) + }) + } + + ngOnDestroy(): void { + this.unsubscribeNotifier.next(true) + this.unsubscribeNotifier.complete() + } + + get saveDisabled(): boolean { + return this.error?.password_confirm || this.error?.email_confirm + } + + onEmailKeyUp(event: KeyboardEvent): void { + this.newEmail = (event.target as HTMLInputElement)?.value + this.onEmailChange() + } + + onEmailConfirmKeyUp(event: KeyboardEvent): void { + this.emailConfirm = (event.target as HTMLInputElement)?.value + this.onEmailChange() + } + + onEmailChange(): void { + this.showEmailConfirm = this.currentEmail !== this.newEmail + if (this.showEmailConfirm) { + this.form.get('email_confirm').enable() + if (this.newEmail !== this.emailConfirm) { + if (!this.error) this.error = {} + this.error.email_confirm = $localize`Emails must match` + } else { + delete this.error?.email_confirm + } + } else { + this.form.get('email_confirm').disable() + delete this.error?.email_confirm + } + } + + onPasswordKeyUp(event: KeyboardEvent): void { + if ((event.target as HTMLElement).tagName !== 'input') return // toggle button can trigger this handler + this.newPassword = (event.target as HTMLInputElement)?.value + this.onPasswordChange() + } + + onPasswordConfirmKeyUp(event: KeyboardEvent): void { + this.passwordConfirm = (event.target as HTMLInputElement)?.value + this.onPasswordChange() + } + + onPasswordChange(): void { + this.showPasswordConfirm = this.currentPassword !== this.newPassword + + if (this.showPasswordConfirm) { + this.form.get('password_confirm').enable() + if (this.newPassword !== this.passwordConfirm) { + if (!this.error) this.error = {} + this.error.password_confirm = $localize`Passwords must match` + } else { + delete this.error?.password_confirm + } + } else { + this.form.get('password_confirm').disable() + delete this.error?.password_confirm + } + } + + save(): void { + const passwordChanged = this.currentPassword !== this.newPassword + const profile = Object.assign({}, this.form.value) + this.networkActive = true + this.profileService + .update(profile) + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe({ + next: () => { + this.toastService.showInfo($localize`Profile updated successfully`) + if (passwordChanged) { + this.toastService.showInfo( + $localize`Password has been changed, you will be logged out momentarily.` + ) + setTimeout(() => { + window.location.href = `${window.location.origin}/accounts/logout/?next=/accounts/login/?next=/` + }, 2500) + } + this.activeModal.close() + }, + error: (error) => { + this.toastService.showError($localize`Error saving profile`, error) + this.networkActive = false + }, + }) + } + + cancel(): void { + this.activeModal.close() + } + + generateAuthToken(): void { + this.profileService.generateAuthToken().subscribe({ + next: (token: string) => { + this.form.patchValue({ auth_token: token }) + }, + error: (error) => { + this.toastService.showError( + $localize`Error generating auth token`, + error + ) + }, + }) + } + + copyAuthToken(): void { + this.clipboard.copy(this.form.get('auth_token').value) + this.copied = true + setTimeout(() => { + this.copied = false + }, 3000) + } +} diff --git a/src-ui/src/app/data/user-profile.ts b/src-ui/src/app/data/user-profile.ts new file mode 100644 index 000000000..94012925a --- /dev/null +++ b/src-ui/src/app/data/user-profile.ts @@ -0,0 +1,7 @@ +export interface PaperlessUserProfile { + email?: string + password?: string + first_name?: string + last_name?: string + auth_token?: string +} diff --git a/src-ui/src/app/services/profile.service.spec.ts b/src-ui/src/app/services/profile.service.spec.ts new file mode 100644 index 000000000..f19a1312e --- /dev/null +++ b/src-ui/src/app/services/profile.service.spec.ts @@ -0,0 +1,54 @@ +import { TestBed } from '@angular/core/testing' + +import { ProfileService } from './profile.service' +import { + HttpClientTestingModule, + HttpTestingController, +} from '@angular/common/http/testing' +import { environment } from 'src/environments/environment' + +describe('ProfileService', () => { + let httpTestingController: HttpTestingController + let service: ProfileService + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ProfileService], + imports: [HttpClientTestingModule], + }) + + httpTestingController = TestBed.inject(HttpTestingController) + service = TestBed.inject(ProfileService) + }) + + afterEach(() => { + httpTestingController.verify() + }) + + it('calls get profile endpoint', () => { + service.get().subscribe() + const req = httpTestingController.expectOne( + `${environment.apiBaseUrl}profile/` + ) + expect(req.request.method).toEqual('GET') + }) + + it('calls patch on update', () => { + service.update({ email: 'foo@bar.com' }).subscribe() + const req = httpTestingController.expectOne( + `${environment.apiBaseUrl}profile/` + ) + expect(req.request.method).toEqual('PATCH') + expect(req.request.body).toEqual({ + email: 'foo@bar.com', + }) + }) + + it('supports generating new auth token', () => { + service.generateAuthToken().subscribe() + const req = httpTestingController.expectOne( + `${environment.apiBaseUrl}profile/generate_auth_token/` + ) + expect(req.request.method).toEqual('POST') + }) +}) diff --git a/src-ui/src/app/services/profile.service.ts b/src-ui/src/app/services/profile.service.ts new file mode 100644 index 000000000..de5aeb7a4 --- /dev/null +++ b/src-ui/src/app/services/profile.service.ts @@ -0,0 +1,34 @@ +import { HttpClient } from '@angular/common/http' +import { Injectable } from '@angular/core' +import { Observable } from 'rxjs' +import { PaperlessUserProfile } from '../data/user-profile' +import { environment } from 'src/environments/environment' + +@Injectable({ + providedIn: 'root', +}) +export class ProfileService { + private endpoint = 'profile' + + constructor(private http: HttpClient) {} + + get(): Observable { + return this.http.get( + `${environment.apiBaseUrl}${this.endpoint}/` + ) + } + + update(profile: PaperlessUserProfile): Observable { + return this.http.patch( + `${environment.apiBaseUrl}${this.endpoint}/`, + profile + ) + } + + generateAuthToken(): Observable { + return this.http.post( + `${environment.apiBaseUrl}${this.endpoint}/generate_auth_token/`, + {} + ) + } +} diff --git a/src/documents/tests/test_api_profile.py b/src/documents/tests/test_api_profile.py new file mode 100644 index 000000000..9e12b1ed3 --- /dev/null +++ b/src/documents/tests/test_api_profile.py @@ -0,0 +1,105 @@ +from django.contrib.auth.models import User +from rest_framework import status +from rest_framework.authtoken.models import Token +from rest_framework.test import APITestCase + +from documents.tests.utils import DirectoriesMixin + + +class TestApiProfile(DirectoriesMixin, APITestCase): + ENDPOINT = "/api/profile/" + + def setUp(self): + super().setUp() + + self.user = User.objects.create_superuser( + username="temp_admin", + first_name="firstname", + last_name="surname", + ) + self.client.force_authenticate(user=self.user) + + def test_get_profile(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to get profile + THEN: + - Profile is returned + """ + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.data["email"], self.user.email) + self.assertEqual(response.data["first_name"], self.user.first_name) + self.assertEqual(response.data["last_name"], self.user.last_name) + + def test_update_profile(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to update profile + THEN: + - Profile is updated + """ + + user_data = { + "email": "new@email.com", + "password": "superpassword1234", + "first_name": "new first name", + "last_name": "new last name", + } + response = self.client.patch(self.ENDPOINT, user_data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + user = User.objects.get(username=self.user.username) + self.assertTrue(user.check_password(user_data["password"])) + self.assertEqual(user.email, user_data["email"]) + self.assertEqual(user.first_name, user_data["first_name"]) + self.assertEqual(user.last_name, user_data["last_name"]) + + def test_update_auth_token(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to generate auth token + THEN: + - Token is created the first time, updated the second + """ + + self.assertEqual(len(Token.objects.all()), 0) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + token1 = Token.objects.filter(user=self.user).first() + self.assertIsNotNone(token1) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + token2 = Token.objects.filter(user=self.user).first() + + self.assertNotEqual(token1.key, token2.key) + + def test_profile_not_logged_in(self): + """ + GIVEN: + - User not logged in + WHEN: + - API call is made to get profile and update token + THEN: + - Profile is returned + """ + + self.client.logout() + + response = self.client.get(self.ENDPOINT) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) diff --git a/src/paperless/serialisers.py b/src/paperless/serialisers.py index 4094a6538..36ba0171e 100644 --- a/src/paperless/serialisers.py +++ b/src/paperless/serialisers.py @@ -97,3 +97,19 @@ class GroupSerializer(serializers.ModelSerializer): "name", "permissions", ) + + +class ProfileSerializer(serializers.ModelSerializer): + email = serializers.EmailField(allow_null=False) + password = ObfuscatedUserPasswordField(required=False, allow_null=False) + auth_token = serializers.SlugRelatedField(read_only=True, slug_field="key") + + class Meta: + model = User + fields = ( + "email", + "password", + "first_name", + "last_name", + "auth_token", + ) diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 2f0c56267..67fddbee0 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -35,7 +35,9 @@ from documents.views import UiSettingsView from documents.views import UnifiedSearchViewSet from paperless.consumers import StatusConsumer from paperless.views import FaviconView +from paperless.views import GenerateAuthTokenView from paperless.views import GroupViewSet +from paperless.views import ProfileView from paperless.views import UserViewSet from paperless_mail.views import MailAccountTestView from paperless_mail.views import MailAccountViewSet @@ -119,6 +121,12 @@ urlpatterns = [ BulkEditObjectPermissionsView.as_view(), name="bulk_edit_object_permissions", ), + path("profile/generate_auth_token/", GenerateAuthTokenView.as_view()), + re_path( + "^profile/", + ProfileView.as_view(), + name="profile_view", + ), *api_router.urls, ], ), diff --git a/src/paperless/views.py b/src/paperless/views.py index e872cc19c..084aee3d7 100644 --- a/src/paperless/views.py +++ b/src/paperless/views.py @@ -7,7 +7,9 @@ from django.db.models.functions import Lower from django.http import HttpResponse from django.views.generic import View from django_filters.rest_framework import DjangoFilterBackend +from rest_framework.authtoken.models import Token from rest_framework.filters import OrderingFilter +from rest_framework.generics import GenericAPIView from rest_framework.pagination import PageNumberPagination from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response @@ -17,6 +19,7 @@ from documents.permissions import PaperlessObjectPermissions from paperless.filters import GroupFilterSet from paperless.filters import UserFilterSet from paperless.serialisers import GroupSerializer +from paperless.serialisers import ProfileSerializer from paperless.serialisers import UserSerializer @@ -106,3 +109,54 @@ class GroupViewSet(ModelViewSet): filter_backends = (DjangoFilterBackend, OrderingFilter) filterset_class = GroupFilterSet ordering_fields = ("name",) + + +class ProfileView(GenericAPIView): + """ + User profile view, only available when logged in + """ + + permission_classes = [IsAuthenticated] + serializer_class = ProfileSerializer + + def get(self, request, *args, **kwargs): + user = self.request.user + + serializer = self.get_serializer(data=request.data) + return Response(serializer.to_representation(user)) + + def patch(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + user = self.request.user if hasattr(self.request, "user") else None + + if len(serializer.validated_data.get("password").replace("*", "")) > 0: + user.set_password(serializer.validated_data.get("password")) + user.save() + serializer.validated_data.pop("password") + + for key, value in serializer.validated_data.items(): + setattr(user, key, value) + user.save() + + return Response(serializer.to_representation(user)) + + +class GenerateAuthTokenView(GenericAPIView): + """ + Generates (or re-generates) an auth token, requires a logged in user + unlike the default DRF endpoint + """ + + permission_classes = [IsAuthenticated] + + def post(self, request, *args, **kwargs): + user = self.request.user + + existing_token = Token.objects.filter(user=user).first() + if existing_token is not None: + existing_token.delete() + token = Token.objects.create(user=user) + return Response( + token.key, + ) From 5b502b1e1a34528b59a0af0a01e73a1f9e7c0656 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Sat, 2 Dec 2023 16:18:06 -0800 Subject: [PATCH 29/34] Use the original image file for the checksum, not the maybe alpha removed version (#4781) --- src/documents/consumer.py | 35 +++++++++++++++++++---------------- src/documents/parsers.py | 2 +- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index 47dba9412..fa8f8fcfe 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -519,7 +519,11 @@ class Consumer(LoggingMixin): document.filename = generate_unique_filename(document) create_source_path_directory(document.source_path) - self._write(document.storage_type, self.path, document.source_path) + self._write( + document.storage_type, + self.original_path, + document.source_path, + ) self._write( document.storage_type, @@ -711,21 +715,20 @@ class Consumer(LoggingMixin): storage_type = Document.STORAGE_TYPE_UNENCRYPTED - with open(self.path, "rb") as f: - document = Document.objects.create( - title=( - self._parse_title_placeholders(self.override_title) - if self.override_title is not None - else file_info.title - )[:127], - content=text, - mime_type=mime_type, - checksum=hashlib.md5(f.read()).hexdigest(), - created=create_date, - modified=create_date, - storage_type=storage_type, - original_filename=self.filename, - ) + document = Document.objects.create( + title=( + self._parse_title_placeholders(self.override_title) + if self.override_title is not None + else file_info.title + )[:127], + content=text, + mime_type=mime_type, + checksum=hashlib.md5(self.original_path.read_bytes()).hexdigest(), + created=create_date, + modified=create_date, + storage_type=storage_type, + original_filename=self.filename, + ) self.apply_overrides(document) diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 16094810e..aa2645e07 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -105,7 +105,7 @@ def get_supported_file_extensions() -> set[str]: return extensions -def get_parser_class_for_mime_type(mime_type: str) -> Optional["DocumentParser"]: +def get_parser_class_for_mime_type(mime_type: str) -> Optional[type["DocumentParser"]]: """ Returns the best parser (by weight) for the given mimetype or None if no parser exists From 47a2ded30d7e77f2a264b187821af001232ce3d5 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 2 Dec 2023 16:52:48 -0800 Subject: [PATCH 30/34] Fix: use default permissions for objects created via dropdown (#4778) --- .../common/edit-dialog/edit-dialog.component.spec.ts | 1 + .../common/edit-dialog/edit-dialog.component.ts | 6 ++++-- .../components/common/input/tags/tags.component.spec.ts | 8 ++++---- .../document-detail/document-detail.component.spec.ts | 1 + 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.spec.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.spec.ts index e81c7c99c..d0974236d 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.spec.ts @@ -131,6 +131,7 @@ describe('EditDialogComponent', () => { }) it('should interpolate object permissions', () => { + component.getMatchingAlgorithms() // coverage component.object = tag component.dialogMode = EditDialogMode.EDIT component.ngOnInit() diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index 30384ea31..43253ba8a 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -58,8 +58,8 @@ export abstract class EditDialogComponent< objectForm: FormGroup = this.getForm() ngOnInit(): void { - if (this.object != null) { - if (this.object['permissions']) { + if (this.object != null && this.dialogMode !== EditDialogMode.CREATE) { + if ((this.object as ObjectWithPermissions).permissions) { this.object['set_permissions'] = this.object['permissions'] } @@ -69,6 +69,8 @@ export abstract class EditDialogComponent< } this.objectForm.patchValue(this.object) } else { + // e.g. if name was set + this.objectForm.patchValue(this.object) // defaults from settings this.objectForm.patchValue({ permissions_form: { diff --git a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts index 85c492aba..7244560fd 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.spec.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.spec.ts @@ -32,11 +32,9 @@ import { CheckComponent } from '../check/check.component' import { IfOwnerDirective } from 'src/app/directives/if-owner.directive' import { TextComponent } from '../text/text.component' import { ColorComponent } from '../color/color.component' -import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { PermissionsFormComponent } from '../permissions/permissions-form/permissions-form.component' import { SelectComponent } from '../select/select.component' -import { ColorSliderModule } from 'ngx-color/slider' -import { By } from '@angular/platform-browser' +import { SettingsService } from 'src/app/services/settings.service' const tags: PaperlessTag[] = [ { @@ -63,8 +61,8 @@ const tags: PaperlessTag[] = [ describe('TagsComponent', () => { let component: TagsComponent let fixture: ComponentFixture - let input: HTMLInputElement let modalService: NgbModal + let settingsService: SettingsService beforeEach(async () => { TestBed.configureTestingModule({ @@ -110,6 +108,7 @@ describe('TagsComponent', () => { }).compileComponents() modalService = TestBed.inject(NgbModal) + settingsService = TestBed.inject(SettingsService) fixture = TestBed.createComponent(TagsComponent) fixture.debugElement.injector.get(NG_VALUE_ACCESSOR) component = fixture.componentInstance @@ -139,6 +138,7 @@ describe('TagsComponent', () => { }) it('should support create new using last search term and open a modal', () => { + settingsService.currentUser = { id: 1 } let activeInstances: NgbModalRef[] modalService.activeInstances.subscribe((v) => (activeInstances = v)) component.select.searchTerm = 'foobar' diff --git a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts index 9f49e737b..4c3f6004d 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.spec.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.spec.ts @@ -263,6 +263,7 @@ describe('DocumentDetailComponent', () => { toastService = TestBed.inject(ToastService) documentListViewService = TestBed.inject(DocumentListViewService) settingsService = TestBed.inject(SettingsService) + settingsService.currentUser = { id: 1 } customFieldsService = TestBed.inject(CustomFieldsService) fixture = TestBed.createComponent(DocumentDetailComponent) component = fixture.componentInstance From 285a4b5aef0aa4676ee66751a381e77a9e9fcdcf Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 3 Dec 2023 12:57:43 -0800 Subject: [PATCH 31/34] Fix: empty strings for consumption template fields should be treated as None (#4762) --- src/documents/serialisers.py | 15 ++++++++-- src/documents/tests/test_api.py | 50 ++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 86d7f0e37..b75ca3418 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1171,10 +1171,19 @@ class ConsumptionTemplateSerializer(serializers.ModelSerializer): def validate(self, attrs): if ("filter_mailrule") in attrs and attrs["filter_mailrule"] is not None: attrs["sources"] = {DocumentSource.MailFetch.value} + + # Empty strings treated as None to avoid unexpected behavior + if ("assign_title") in attrs and len(attrs["assign_title"]) == 0: + attrs["assign_title"] = None + if "filter_filename" in attrs and len(attrs["filter_filename"]) == 0: + attrs["filter_filename"] = None + if "filter_path" in attrs and len(attrs["filter_path"]) == 0: + attrs["filter_path"] = None + if ( - ("filter_mailrule" not in attrs) - and ("filter_filename" not in attrs or len(attrs["filter_filename"]) == 0) - and ("filter_path" not in attrs or len(attrs["filter_path"]) == 0) + "filter_mailrule" not in attrs + and ("filter_filename" not in attrs or attrs["filter_filename"] is None) + and ("filter_path" not in attrs or attrs["filter_path"] is None) ): raise serializers.ValidationError( "File name, path or mail rule filter are required", diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index b82dc8f10..2cda45e7f 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -5740,7 +5740,55 @@ class TestApiConsumptionTemplates(DirectoriesMixin, APITestCase): content_type="application/json", ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - self.assertEqual(StoragePath.objects.count(), 1) + self.assertEqual(ConsumptionTemplate.objects.count(), 1) + + def test_api_create_consumption_template_empty_fields(self): + """ + GIVEN: + - API request to create a consumption template + - Path or filename filter or assign title are empty string + WHEN: + - API is called + THEN: + - Template is created but filter or title assignment is not set if "" + """ + response = self.client.post( + self.ENDPOINT, + json.dumps( + { + "name": "Template 2", + "order": 1, + "sources": [DocumentSource.ApiUpload], + "filter_filename": "*test*", + "filter_path": "", + "assign_title": "", + }, + ), + content_type="application/json", + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + ct = ConsumptionTemplate.objects.get(name="Template 2") + self.assertEqual(ct.filter_filename, "*test*") + self.assertIsNone(ct.filter_path) + self.assertIsNone(ct.assign_title) + + response = self.client.post( + self.ENDPOINT, + json.dumps( + { + "name": "Template 3", + "order": 1, + "sources": [DocumentSource.ApiUpload], + "filter_filename": "", + "filter_path": "*/test/*", + }, + ), + content_type="application/json", + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + ct2 = ConsumptionTemplate.objects.get(name="Template 3") + self.assertEqual(ct2.filter_path, "*/test/*") + self.assertIsNone(ct2.filter_filename) def test_api_create_consumption_template_with_mailrule(self): """ From f27f25aa03d032ad7ca6a5f2ba41f83bd00c0bd7 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 3 Dec 2023 15:35:30 -0800 Subject: [PATCH 32/34] Enhancement: support assigning custom fields via consumption templates (#4727) --- docs/usage.md | 1 + ...mption-template-edit-dialog.component.html | 1 + ...ion-template-edit-dialog.component.spec.ts | 10 + ...sumption-template-edit-dialog.component.ts | 12 +- .../data/paperless-consumption-template.ts | 2 + src/documents/consumer.py | 18 ++ src/documents/data_models.py | 7 + ...onsumptiontemplate_assign_custom_fields.py | 23 ++ src/documents/models.py | 275 +++++++++--------- src/documents/serialisers.py | 3 +- src/documents/tasks.py | 1 + src/documents/tests/test_api.py | 7 + src/documents/tests/test_consumer.py | 24 ++ .../tests/test_consumption_templates.py | 12 + 14 files changed, 260 insertions(+), 136 deletions(-) create mode 100644 src/documents/migrations/1042_consumptiontemplate_assign_custom_fields.py diff --git a/docs/usage.md b/docs/usage.md index a3e5b3665..d27ea9e1d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -283,6 +283,7 @@ Consumption templates can assign: - Tags, correspondent, document types - Document owner - View and / or edit permissions to users or groups +- Custom fields. Note that no value for the field will be set ### Consumption template permissions diff --git a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html index 371faaebc..920026448 100644 --- a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html @@ -35,6 +35,7 @@ +
diff --git a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.spec.ts b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.spec.ts index 52789fb49..2a1ea25fe 100644 --- a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.spec.ts @@ -20,6 +20,7 @@ import { TagsComponent } from '../../input/tags/tags.component' import { TextComponent } from '../../input/text/text.component' import { EditDialogMode } from '../edit-dialog.component' import { ConsumptionTemplateEditDialogComponent } from './consumption-template-edit-dialog.component' +import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' describe('ConsumptionTemplateEditDialogComponent', () => { let component: ConsumptionTemplateEditDialogComponent @@ -93,6 +94,15 @@ describe('ConsumptionTemplateEditDialogComponent', () => { }), }, }, + { + provide: CustomFieldsService, + useValue: { + listAll: () => + of({ + results: [], + }), + }, + }, ], imports: [ HttpClientTestingModule, diff --git a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts index 3f89e5d76..dedbd3523 100644 --- a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts @@ -18,6 +18,8 @@ import { SettingsService } from 'src/app/services/settings.service' import { EditDialogComponent } from '../edit-dialog.component' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' +import { CustomFieldsService } from 'src/app/services/rest/custom-fields.service' +import { PaperlessCustomField } from 'src/app/data/paperless-custom-field' export const DOCUMENT_SOURCE_OPTIONS = [ { @@ -45,6 +47,7 @@ export class ConsumptionTemplateEditDialogComponent extends EditDialogComponent< documentTypes: PaperlessDocumentType[] storagePaths: PaperlessStoragePath[] mailRules: PaperlessMailRule[] + customFields: PaperlessCustomField[] constructor( service: ConsumptionTemplateService, @@ -54,7 +57,8 @@ export class ConsumptionTemplateEditDialogComponent extends EditDialogComponent< storagePathService: StoragePathService, mailRuleService: MailRuleService, userService: UserService, - settingsService: SettingsService + settingsService: SettingsService, + customFieldsService: CustomFieldsService ) { super(service, activeModal, userService, settingsService) @@ -77,6 +81,11 @@ export class ConsumptionTemplateEditDialogComponent extends EditDialogComponent< .listAll() .pipe(first()) .subscribe((result) => (this.mailRules = result.results)) + + customFieldsService + .listAll() + .pipe(first()) + .subscribe((result) => (this.customFields = result.results)) } getCreateTitle() { @@ -106,6 +115,7 @@ export class ConsumptionTemplateEditDialogComponent extends EditDialogComponent< assign_view_groups: new FormControl([]), assign_change_users: new FormControl([]), assign_change_groups: new FormControl([]), + assign_custom_fields: new FormControl([]), }) } diff --git a/src-ui/src/app/data/paperless-consumption-template.ts b/src-ui/src/app/data/paperless-consumption-template.ts index c303fc8d4..94e6202c1 100644 --- a/src-ui/src/app/data/paperless-consumption-template.ts +++ b/src-ui/src/app/data/paperless-consumption-template.ts @@ -38,4 +38,6 @@ export interface PaperlessConsumptionTemplate extends ObjectWithId { assign_change_users?: number[] // [PaperlessUser.id] assign_change_groups?: number[] // [PaperlessGroup.id] + + assign_custom_fields?: number[] // [PaperlessCustomField.id] } diff --git a/src/documents/consumer.py b/src/documents/consumer.py index fa8f8fcfe..4f97881ef 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -29,6 +29,8 @@ from documents.loggers import LoggingMixin from documents.matching import document_matches_template from documents.models import ConsumptionTemplate from documents.models import Correspondent +from documents.models import CustomField +from documents.models import CustomFieldInstance from documents.models import Document from documents.models import DocumentType from documents.models import FileInfo @@ -124,6 +126,7 @@ class Consumer(LoggingMixin): self.override_asn = None self.task_id = None self.override_owner_id = None + self.override_custom_field_ids = None self.channel_layer = get_channel_layer() @@ -333,6 +336,7 @@ class Consumer(LoggingMixin): override_view_groups=None, override_change_users=None, override_change_groups=None, + override_custom_field_ids=None, ) -> Document: """ Return the document object if it was successfully created. @@ -353,6 +357,7 @@ class Consumer(LoggingMixin): self.override_view_groups = override_view_groups self.override_change_users = override_change_users self.override_change_groups = override_change_groups + self.override_custom_field_ids = override_custom_field_ids self._send_progress( 0, @@ -644,6 +649,11 @@ class Consumer(LoggingMixin): template_overrides.change_groups = [ group.pk for group in template.assign_change_groups.all() ] + if template.assign_custom_fields is not None: + template_overrides.custom_field_ids = [ + field.pk for field in template.assign_custom_fields.all() + ] + overrides.update(template_overrides) return overrides @@ -782,6 +792,14 @@ class Consumer(LoggingMixin): } set_permissions_for_object(permissions=permissions, object=document) + if self.override_custom_field_ids: + for field_id in self.override_custom_field_ids: + field = CustomField.objects.get(pk=field_id) + CustomFieldInstance.objects.create( + field=field, + document=document, + ) # adds to document + def _write(self, storage_type, source, target): with open(source, "rb") as read_file, open(target, "wb") as write_file: write_file.write(read_file.read()) diff --git a/src/documents/data_models.py b/src/documents/data_models.py index 29a23fa7a..8b53e2c14 100644 --- a/src/documents/data_models.py +++ b/src/documents/data_models.py @@ -28,6 +28,7 @@ class DocumentMetadataOverrides: view_groups: Optional[list[int]] = None change_users: Optional[list[int]] = None change_groups: Optional[list[int]] = None + custom_field_ids: Optional[list[int]] = None def update(self, other: "DocumentMetadataOverrides") -> "DocumentMetadataOverrides": """ @@ -74,6 +75,12 @@ class DocumentMetadataOverrides: self.change_groups = other.change_groups elif other.change_groups is not None: self.change_groups.extend(other.change_groups) + + if self.custom_field_ids is None: + self.custom_field_ids = other.custom_field_ids + elif other.custom_field_ids is not None: + self.custom_field_ids.extend(other.custom_field_ids) + return self diff --git a/src/documents/migrations/1042_consumptiontemplate_assign_custom_fields.py b/src/documents/migrations/1042_consumptiontemplate_assign_custom_fields.py new file mode 100644 index 000000000..08d6062ea --- /dev/null +++ b/src/documents/migrations/1042_consumptiontemplate_assign_custom_fields.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.7 on 2023-11-30 17:44 + +from django.db import migrations +from django.db import models + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "1041_alter_consumptiontemplate_sources"), + ] + + operations = [ + migrations.AddField( + model_name="consumptiontemplate", + name="assign_custom_fields", + field=models.ManyToManyField( + blank=True, + related_name="+", + to="documents.customfield", + verbose_name="assign these custom fields", + ), + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index c3eea0ac9..d688253de 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -743,140 +743,6 @@ class ShareLink(models.Model): return f"Share Link for {self.document.title}" -class ConsumptionTemplate(models.Model): - class DocumentSourceChoices(models.IntegerChoices): - CONSUME_FOLDER = DocumentSource.ConsumeFolder.value, _("Consume Folder") - API_UPLOAD = DocumentSource.ApiUpload.value, _("Api Upload") - MAIL_FETCH = DocumentSource.MailFetch.value, _("Mail Fetch") - - name = models.CharField(_("name"), max_length=256, unique=True) - - order = models.IntegerField(_("order"), default=0) - - sources = MultiSelectField( - max_length=5, - choices=DocumentSourceChoices.choices, - default=f"{DocumentSource.ConsumeFolder},{DocumentSource.ApiUpload},{DocumentSource.MailFetch}", - ) - - filter_path = models.CharField( - _("filter path"), - max_length=256, - null=True, - blank=True, - help_text=_( - "Only consume documents with a path that matches " - "this if specified. Wildcards specified as * are " - "allowed. Case insensitive.", - ), - ) - - filter_filename = models.CharField( - _("filter filename"), - max_length=256, - null=True, - blank=True, - help_text=_( - "Only consume documents which entirely match this " - "filename if specified. Wildcards such as *.pdf or " - "*invoice* are allowed. Case insensitive.", - ), - ) - - filter_mailrule = models.ForeignKey( - "paperless_mail.MailRule", - null=True, - blank=True, - on_delete=models.SET_NULL, - verbose_name=_("filter documents from this mail rule"), - ) - - assign_title = models.CharField( - _("assign title"), - max_length=256, - null=True, - blank=True, - help_text=_( - "Assign a document title, can include some placeholders, " - "see documentation.", - ), - ) - - assign_tags = models.ManyToManyField( - Tag, - blank=True, - verbose_name=_("assign this tag"), - ) - - assign_document_type = models.ForeignKey( - DocumentType, - null=True, - blank=True, - on_delete=models.SET_NULL, - verbose_name=_("assign this document type"), - ) - - assign_correspondent = models.ForeignKey( - Correspondent, - null=True, - blank=True, - on_delete=models.SET_NULL, - verbose_name=_("assign this correspondent"), - ) - - assign_storage_path = models.ForeignKey( - StoragePath, - null=True, - blank=True, - on_delete=models.SET_NULL, - verbose_name=_("assign this storage path"), - ) - - assign_owner = models.ForeignKey( - User, - null=True, - blank=True, - on_delete=models.SET_NULL, - related_name="+", - verbose_name=_("assign this owner"), - ) - - assign_view_users = models.ManyToManyField( - User, - blank=True, - related_name="+", - verbose_name=_("grant view permissions to these users"), - ) - - assign_view_groups = models.ManyToManyField( - Group, - blank=True, - related_name="+", - verbose_name=_("grant view permissions to these groups"), - ) - - assign_change_users = models.ManyToManyField( - User, - blank=True, - related_name="+", - verbose_name=_("grant change permissions to these users"), - ) - - assign_change_groups = models.ManyToManyField( - Group, - blank=True, - related_name="+", - verbose_name=_("grant change permissions to these groups"), - ) - - class Meta: - verbose_name = _("consumption template") - verbose_name_plural = _("consumption templates") - - def __str__(self): - return f"{self.name}" - - class CustomField(models.Model): """ Defines the name and type of a custom field @@ -1013,3 +879,144 @@ if settings.AUDIT_LOG_ENABLED: auditlog.register(Note) auditlog.register(CustomField) auditlog.register(CustomFieldInstance) + + +class ConsumptionTemplate(models.Model): + class DocumentSourceChoices(models.IntegerChoices): + CONSUME_FOLDER = DocumentSource.ConsumeFolder.value, _("Consume Folder") + API_UPLOAD = DocumentSource.ApiUpload.value, _("Api Upload") + MAIL_FETCH = DocumentSource.MailFetch.value, _("Mail Fetch") + + name = models.CharField(_("name"), max_length=256, unique=True) + + order = models.IntegerField(_("order"), default=0) + + sources = MultiSelectField( + max_length=5, + choices=DocumentSourceChoices.choices, + default=f"{DocumentSource.ConsumeFolder},{DocumentSource.ApiUpload},{DocumentSource.MailFetch}", + ) + + filter_path = models.CharField( + _("filter path"), + max_length=256, + null=True, + blank=True, + help_text=_( + "Only consume documents with a path that matches " + "this if specified. Wildcards specified as * are " + "allowed. Case insensitive.", + ), + ) + + filter_filename = models.CharField( + _("filter filename"), + max_length=256, + null=True, + blank=True, + help_text=_( + "Only consume documents which entirely match this " + "filename if specified. Wildcards such as *.pdf or " + "*invoice* are allowed. Case insensitive.", + ), + ) + + filter_mailrule = models.ForeignKey( + "paperless_mail.MailRule", + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("filter documents from this mail rule"), + ) + + assign_title = models.CharField( + _("assign title"), + max_length=256, + null=True, + blank=True, + help_text=_( + "Assign a document title, can include some placeholders, " + "see documentation.", + ), + ) + + assign_tags = models.ManyToManyField( + Tag, + blank=True, + verbose_name=_("assign this tag"), + ) + + assign_document_type = models.ForeignKey( + DocumentType, + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("assign this document type"), + ) + + assign_correspondent = models.ForeignKey( + Correspondent, + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("assign this correspondent"), + ) + + assign_storage_path = models.ForeignKey( + StoragePath, + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("assign this storage path"), + ) + + assign_owner = models.ForeignKey( + User, + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name="+", + verbose_name=_("assign this owner"), + ) + + assign_view_users = models.ManyToManyField( + User, + blank=True, + related_name="+", + verbose_name=_("grant view permissions to these users"), + ) + + assign_view_groups = models.ManyToManyField( + Group, + blank=True, + related_name="+", + verbose_name=_("grant view permissions to these groups"), + ) + + assign_change_users = models.ManyToManyField( + User, + blank=True, + related_name="+", + verbose_name=_("grant change permissions to these users"), + ) + + assign_change_groups = models.ManyToManyField( + Group, + blank=True, + related_name="+", + verbose_name=_("grant change permissions to these groups"), + ) + + assign_custom_fields = models.ManyToManyField( + CustomField, + blank=True, + related_name="+", + verbose_name=_("assign these custom fields"), + ) + + class Meta: + verbose_name = _("consumption template") + verbose_name_plural = _("consumption templates") + + def __str__(self): + return f"{self.name}" diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index b75ca3418..2373a25dd 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -429,7 +429,7 @@ class ReadWriteSerializerMethodField(serializers.SerializerMethodField): class CustomFieldInstanceSerializer(serializers.ModelSerializer): field = serializers.PrimaryKeyRelatedField(queryset=CustomField.objects.all()) - value = ReadWriteSerializerMethodField() + value = ReadWriteSerializerMethodField(allow_null=True) def create(self, validated_data): type_to_data_store_name_map = { @@ -1166,6 +1166,7 @@ class ConsumptionTemplateSerializer(serializers.ModelSerializer): "assign_view_groups", "assign_change_users", "assign_change_groups", + "assign_custom_fields", ] def validate(self, attrs): diff --git a/src/documents/tasks.py b/src/documents/tasks.py index e89b4fa47..10a44a8fe 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -179,6 +179,7 @@ def consume_file( override_view_groups=overrides.view_groups, override_change_users=overrides.change_users, override_change_groups=overrides.change_groups, + override_custom_field_ids=overrides.custom_field_ids, task_id=self.request.id, ) diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 2cda45e7f..e671ce2ce 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -5649,6 +5649,11 @@ class TestApiConsumptionTemplates(DirectoriesMixin, APITestCase): self.t2 = Tag.objects.create(name="t2") self.t3 = Tag.objects.create(name="t3") self.sp = StoragePath.objects.create(path="/test/") + self.cf1 = CustomField.objects.create(name="Custom Field 1", data_type="string") + self.cf2 = CustomField.objects.create( + name="Custom Field 2", + data_type="integer", + ) self.ct = ConsumptionTemplate.objects.create( name="Template 1", @@ -5669,6 +5674,8 @@ class TestApiConsumptionTemplates(DirectoriesMixin, APITestCase): self.ct.assign_view_groups.add(self.group1.pk) self.ct.assign_change_users.add(self.user3.pk) self.ct.assign_change_groups.add(self.group1.pk) + self.ct.assign_custom_fields.add(self.cf1.pk) + self.ct.assign_custom_fields.add(self.cf2.pk) self.ct.save() def test_api_get_consumption_template(self): diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 831dbcc3a..e2cd74016 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -22,6 +22,7 @@ from documents.consumer import Consumer from documents.consumer import ConsumerError from documents.consumer import ConsumerFilePhase from documents.models import Correspondent +from documents.models import CustomField from documents.models import Document from documents.models import DocumentType from documents.models import FileInfo @@ -458,6 +459,29 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertIn(t3, document.tags.all()) self._assert_first_last_send_progress() + def testOverrideCustomFields(self): + cf1 = CustomField.objects.create(name="Custom Field 1", data_type="string") + cf2 = CustomField.objects.create( + name="Custom Field 2", + data_type="integer", + ) + cf3 = CustomField.objects.create( + name="Custom Field 3", + data_type="url", + ) + document = self.consumer.try_consume_file( + self.get_test_file(), + override_custom_field_ids=[cf1.id, cf3.id], + ) + + fields_used = [ + field_instance.field for field_instance in document.custom_fields.all() + ] + self.assertIn(cf1, fields_used) + self.assertNotIn(cf2, fields_used) + self.assertIn(cf3, fields_used) + self._assert_first_last_send_progress() + def testOverrideAsn(self): document = self.consumer.try_consume_file( self.get_test_file(), diff --git a/src/documents/tests/test_consumption_templates.py b/src/documents/tests/test_consumption_templates.py index dd5d7b2af..3abbacf14 100644 --- a/src/documents/tests/test_consumption_templates.py +++ b/src/documents/tests/test_consumption_templates.py @@ -11,6 +11,7 @@ from documents.data_models import ConsumableDocument from documents.data_models import DocumentSource from documents.models import ConsumptionTemplate from documents.models import Correspondent +from documents.models import CustomField from documents.models import DocumentType from documents.models import StoragePath from documents.models import Tag @@ -32,6 +33,11 @@ class TestConsumptionTemplates(DirectoriesMixin, FileSystemAssertsMixin, TestCas self.t2 = Tag.objects.create(name="t2") self.t3 = Tag.objects.create(name="t3") self.sp = StoragePath.objects.create(path="/test/") + self.cf1 = CustomField.objects.create(name="Custom Field 1", data_type="string") + self.cf2 = CustomField.objects.create( + name="Custom Field 2", + data_type="integer", + ) self.user2 = User.objects.create(username="user2") self.user3 = User.objects.create(username="user3") @@ -95,6 +101,8 @@ class TestConsumptionTemplates(DirectoriesMixin, FileSystemAssertsMixin, TestCas ct.assign_view_groups.add(self.group1.pk) ct.assign_change_users.add(self.user3.pk) ct.assign_change_groups.add(self.group1.pk) + ct.assign_custom_fields.add(self.cf1.pk) + ct.assign_custom_fields.add(self.cf2.pk) ct.save() self.assertEqual(ct.__str__(), "Template 1") @@ -128,6 +136,10 @@ class TestConsumptionTemplates(DirectoriesMixin, FileSystemAssertsMixin, TestCas overrides["override_title"], "Doc from {correspondent}", ) + self.assertEqual( + overrides["override_custom_field_ids"], + [self.cf1.pk, self.cf2.pk], + ) info = cm.output[0] expected_str = f"Document matched template {ct}" From 62c417cd5189be0b93e3c0529326609f9d1e4f40 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 3 Dec 2023 19:09:02 -0800 Subject: [PATCH 33/34] Fixes the 0023 migration to include the new help text and verbose name --- ..._mailrule_filter_attachment_filename_and_more.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/paperless_mail/migrations/0023_remove_mailrule_filter_attachment_filename_and_more.py b/src/paperless_mail/migrations/0023_remove_mailrule_filter_attachment_filename_and_more.py index 17cb7d645..1a1eac790 100644 --- a/src/paperless_mail/migrations/0023_remove_mailrule_filter_attachment_filename_and_more.py +++ b/src/paperless_mail/migrations/0023_remove_mailrule_filter_attachment_filename_and_more.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.7 on 2023-11-28 17:47 +# Generated by Django 4.2.7 on 2023-12-04 03:06 from django.db import migrations from django.db import models @@ -26,4 +26,15 @@ class Migration(migrations.Migration): verbose_name="filter attachment filename exclusive", ), ), + migrations.AlterField( + model_name="mailrule", + name="filter_attachment_filename_include", + field=models.CharField( + blank=True, + help_text="Only consume documents which entirely match this filename if specified. Wildcards such as *.pdf or *invoice* are allowed. Case insensitive.", + max_length=256, + null=True, + verbose_name="filter attachment filename inclusive", + ), + ), ] From 80ff5677eacec9271f342525155c250d9245c54c Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 4 Dec 2023 06:40:17 -0800 Subject: [PATCH 34/34] Fix: bulk edit object permissions should use permissions object (#4797) --- .../permissions-dialog.component.spec.ts | 11 ++++++++++- .../permissions-dialog.component.ts | 13 +++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts index 47f245d0a..3f601d771 100644 --- a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts +++ b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.spec.ts @@ -80,7 +80,16 @@ describe('PermissionsDialogComponent', () => { it('should return permissions', () => { expect(component.permissions).toEqual({ owner: null, - set_permissions: null, + set_permissions: { + view: { + users: [], + groups: [], + }, + change: { + users: [], + groups: [], + }, + }, }) component.form.get('permissions_form').setValue(set_permissions) expect(component.permissions).toEqual(set_permissions) diff --git a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts index 8e5f2321b..e6d5fdb2b 100644 --- a/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts +++ b/src-ui/src/app/components/common/permissions-dialog/permissions-dialog.component.ts @@ -52,8 +52,17 @@ export class PermissionsDialogComponent { get permissions() { return { owner: this.form.get('permissions_form').value?.owner ?? null, - set_permissions: - this.form.get('permissions_form').value?.set_permissions ?? null, + set_permissions: this.form.get('permissions_form').value + ?.set_permissions ?? { + view: { + users: [], + groups: [], + }, + change: { + users: [], + groups: [], + }, + }, } }