{"id":34539622,"url":"https://github.com/codebar-ag/laravel-docuware","last_synced_at":"2025-12-24T06:14:47.811Z","repository":{"id":46517147,"uuid":"341104605","full_name":"codebar-ag/laravel-docuware","owner":"codebar-ag","description":"Laravel DocuWare Package","archived":false,"fork":false,"pushed_at":"2025-10-27T22:21:25.000Z","size":893,"stargazers_count":11,"open_issues_count":3,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-28T07:29:06.836Z","etag":null,"topics":["docuware","laravel","package","php"],"latest_commit_sha":null,"homepage":"https://www.docuware.com","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codebar-ag.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-02-22T06:43:04.000Z","updated_at":"2025-10-17T14:55:22.000Z","dependencies_parsed_at":"2023-02-12T15:45:44.556Z","dependency_job_id":"8e2c16d4-5191-4487-8d99-30eb2b273cc2","html_url":"https://github.com/codebar-ag/laravel-docuware","commit_stats":{"total_commits":241,"total_committers":7,"mean_commits":34.42857142857143,"dds":"0.46887966804979253","last_synced_commit":"8366d645fb53ed0cc9dab973cc38dee8e3c68d9e"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/codebar-ag/laravel-docuware","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebar-ag%2Flaravel-docuware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebar-ag%2Flaravel-docuware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebar-ag%2Flaravel-docuware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebar-ag%2Flaravel-docuware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codebar-ag","download_url":"https://codeload.github.com/codebar-ag/laravel-docuware/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codebar-ag%2Flaravel-docuware/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27996107,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-24T02:00:07.193Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docuware","laravel","package","php"],"created_at":"2025-12-24T06:14:44.921Z","updated_at":"2025-12-24T06:14:47.797Z","avatar_url":"https://github.com/codebar-ag.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://banners.beyondco.de/Laravel%20DocuWare.png?theme=light\u0026packageManager=composer+require\u0026packageName=codebar-ag%2Flaravel-docuware\u0026pattern=circuitBoard\u0026style=style_1\u0026description=An+opinionated+way+to+integrate+DocuWare+with+Laravel\u0026md=1\u0026showWatermark=0\u0026fontSize=175px\u0026images=document-report\"\u003e\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/codebar-ag/laravel-docuware.svg?style=flat-square)](https://packagist.org/packages/codebar-ag/laravel-docuware)\n[![Total Downloads](https://img.shields.io/packagist/dt/codebar-ag/laravel-docuware.svg?style=flat-square)](https://packagist.org/packages/codebar-ag/laravel-docuware)\n[![GitHub-Tests](https://github.com/codebar-ag/laravel-docuware/actions/workflows/run-tests.yml/badge.svg?branch=main)](https://github.com/codebar-ag/laravel-docuware/actions/workflows/run-tests.yml)\n[![GitHub Code Style](https://github.com/codebar-ag/laravel-docuware/actions/workflows/fix-php-code-style-issues.yml/badge.svg?branch=main)](https://github.com/codebar-ag/laravel-docuware/actions/workflows/fix-php-code-style-issues.yml)\n[![PHPStan](https://github.com/codebar-ag/laravel-docuware/actions/workflows/phpstan.yml/badge.svg)](https://github.com/codebar-ag/laravel-docuware/actions/workflows/phpstan.yml)\n[![Dependency Review](https://github.com/codebar-ag/laravel-docuware/actions/workflows/dependency-review.yml/badge.svg)](https://github.com/codebar-ag/laravel-docuware/actions/workflows/dependency-review.yml)\n\nThis package was developed to give you a quick start to communicate with the\nDocuWare REST API. It is used to query the most common endpoints.\n\n⚠️ This package is not designed as a replacement of the official\n[DocuWare REST API](https://developer.docuware.com/rest/index.html).\nSee the documentation if you need further functionality. ⚠️\n\n## Navigation\n\u003c!-- TOC --\u003e\n  * [Navigation](#navigation)\n  * [💡 What is DocuWare?](#-what-is-docuware)\n  * [🛠 Requirements](#-requirements)\n  * [⚙️ Installation](#-installation)\n  * [🏗 Usage](#-usage)\n    * [Getting Started with OAuth](#getting-started-with-oauth)\n    * [Getting a new token via Username \u0026 Password:](#getting-a-new-token-via-username--password)\n    * [Getting a new token via Username \u0026 Password (Trusted User):](#getting-a-new-token-via-username--password-trusted-user)\n    * [Available Requests](#available-requests)\n      * [Organization](#organization)\n        * [Get Organization](#get-organization)\n        * [Get All File Cabinets And Document Trays](#get-all-file-cabinets-and-document-trays)\n      * [User Management](#user-management)\n        * [Get Users](#get-users)\n          * [Get Users](#get-users-1)\n          * [Get User By Id](#get-user-by-id)\n          * [Get Users Of A Role](#get-users-of-a-role)\n          * [Get Users Of A Group](#get-users-of-a-group)\n        * [Create/Update Users](#createupdate-users)\n          * [Create User](#create-user)\n          * [Update User](#update-user)\n        * [Get/Modify Groups](#getmodify-groups)\n          * [Get Groups](#get-groups)\n          * [Get All Groups For A Specific User](#get-all-groups-for-a-specific-user)\n          * [Add User To A Group](#add-user-to-a-group)\n          * [Remove User From A Group](#remove-user-from-a-group)\n        * [Get/Modify Roles](#getmodify-roles)\n          * [Get Roles](#get-roles)\n          * [Get All Roles For A Specific User](#get-all-roles-for-a-specific-user)\n          * [Add User To A Role](#add-user-to-a-role)\n          * [Remove User From A Role](#remove-user-from-a-role)\n      * [File Cabinets](#file-cabinets)\n        * [General](#general)\n          * [Get File Cabinet Information](#get-file-cabinet-information)\n          * [Get Total Number Of Documents](#get-total-number-of-documents)\n        * [Dialogs](#dialogs)\n          * [Get All Dialogs](#get-all-dialogs)\n          * [Get Dialogs of a Specific Type](#get-dialogs-of-a-specific-type)\n          * [Get Dialogs Of A Specific Type](#get-dialogs-of-a-specific-type-1)\n        * [Search](#search)\n          * [Get A Specific Document From A File Cabinet](#get-a-specific-document-from-a-file-cabinet)\n          * [Get Documents From A File Cabinet](#get-documents-from-a-file-cabinet)\n          * [Most basic example to search for documents.](#most-basic-example-to-search-for-documents)\n          * [Search in multiple file cabinets](#search-in-multiple-file-cabinets)\n          * [Find results on the next page](#find-results-on-the-next-page)\n          * [Define the number of results which should be shown per page](#define-the-number-of-results-which-should-be-shown-per-page)\n          * [Use the full-text search](#use-the-full-text-search)\n          * [Search documents which are created from the first of march.](#search-documents-which-are-created-from-the-first-of-march)\n          * [Search documents which are created until the first of april.](#search-documents-which-are-created-until-the-first-of-april)\n          * [Order the results by field name.](#order-the-results-by-field-name)\n          * [Search documents filtered to the value.](#search-documents-filtered-to-the-value)\n          * [Search documents filtered to multiple values.](#search-documents-filtered-to-multiple-values)\n          * [You can specify the dialog which should be used.](#you-can-specify-the-dialog-which-should-be-used)\n          * [You can also combine everything.](#you-can-also-combine-everything)\n        * [Check In Check Out](#check-in-check-out)\n        * [Select Lists](#select-lists)\n          * [Get Select Lists](#get-select-lists)\n        * [Upload](#upload)\n          * [Create Data Record](#create-data-record)\n          * [Create Table Data Record](#create-table-data-record)\n          * [Append File(s) To A Data Record](#append-files-to-a-data-record)\n          * [Append A Single PDF To A Document](#append-a-single-pdf-to-a-document)\n          * [Replace A PDF Document Section](#replace-a-pdf-document-section)\n          * [Batch Index Fields Update](#batch-index-fields-update)\n          * [Get Fields](#get-fields)\n      * [Documents](#documents)\n        * [Update Index Values](#update-index-values)\n          * [Update Table Data Record](#update-table-data-record)\n        * [Modify Documents](#modify-documents)\n          * [Transfer Document](#transfer-document)\n          * [Delete Documents](#delete-documents)\n        * [Clip/Unclip \u0026 Staple/Unstaple](#clipunclip--stapleunstaple)\n          * [Clip](#clip)\n          * [Unclip](#unclip)\n          * [Staple](#staple)\n          * [Unstaple](#unstaple)\n        * [Annotations/Stamps](#annotationsstamps)\n          * [Documents Trash Bin](#documents-trash-bin)\n          * [Get Documents](#get-documents)\n          * [Delete Documents](#delete-documents-1)\n          * [Restore Documents](#restore-documents)\n        * [Application Properties](#application-properties)\n          * [Add Application Properties](#add-application-properties)\n          * [Update Application Properties](#update-application-properties)\n          * [Delete Application Properties](#delete-application-properties)\n          * [Get Application Properties](#get-application-properties)\n        * [Sections](#sections)\n          * [Get All Sections](#get-all-sections)\n          * [Get Specific Section](#get-specific-section)\n          * [Delete Section](#delete-section)\n          * [Get Textshot](#get-textshot)\n        * [Download](#download)\n          * [Download Document](#download-document)\n          * [Download Section](#download-section)\n          * [Download Thumbnail](#download-thumbnail)\n      * [Workflow](#workflow)\n        * [Workflow History](#workflow-history)\n          * [Get Document Workflow History](#get-document-workflow-history)\n          * [Get Document Workflow History Steps](#get-document-workflow-history-steps)\n  * [Extending the connector (EXAMPLE)](#extending-the-connector-example)\n      * [Create a new connector](#create-a-new-connector)\n      * [Use the new connector](#use-the-new-connector)\n  * [🖼 Make encrypted URLs](#-make-encrypted-urls)\n    * [Make encrypted URL for a document in a file cabinet.](#make-encrypted-url-for-a-document-in-a-file-cabinet)\n    * [Make encrypted URL for a document in a basket.](#make-encrypted-url-for-a-document-in-a-basket)\n    * [Make encrypted URL valid for a specific amount of time.](#make-encrypted-url-valid-for-a-specific-amount-of-time)\n  * [🏋️ Document Index Fields DTO showcase](#-document-index-fields-dto-showcase)\n  * [📦 Caching requests](#-caching-requests)\n    * [Is Cached](#is-cached)\n    * [Invalidate Cache](#invalidate-cache)\n    * [Disable Caching](#disable-caching)\n  * [💥 Exceptions explained](#-exceptions-explained)\n  * [✨ Events](#-events)\n  * [🔧 Configuration file](#-configuration-file)\n  * [🚧 Testing](#-testing)\n  * [📝 Changelog](#-changelog)\n  * [✏️ Contributing](#-contributing)\n  * [🧑‍💻 Security Vulnerabilities](#-security-vulnerabilities)\n  * [🙏 Credits](#-credits)\n  * [🎭 License](#-license)\n\u003c!-- TOC --\u003e\n\n## 💡 What is DocuWare?\n\nDocuWare provides cloud document management and workflow automation software\nthat enables you to digitize, secure and work with business documents,\nthen optimize the processes that power the core of your business.\n\n## 🛠 Requirements\n\n\u003cdetails\u003e\n \u003csummary\u003eVersion Support\u003c/summary\u003e\n\n| Version       | PHP Version | Laravel Version | DocuWare Cloud Access |\n|---------------|-------------|-----------------|-----------------------|\n| v12.0         | ^8.2 - ^8.4 | 12.*            | ✅                     |\n| v11.0 (alpha) | ^8.2        | 11.*            | ✅                     |\n| \u003e v4.0        | ^8.2        | 11.*            | ✅                     |\n| \u003e v3.0        | ^8.2        | 10.*            | ✅                     |\n| \u003e v2.0        | ^8.1        | 9.*             | ✅                     |\n| \u003e v1.2        | ^8.1        | 9.*             | ✅                     |\n| \u003c v1.2        | ^8.0        | 8.*             | ✅                     |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n \u003csummary\u003eCurrent Support\u003c/summary\u003e\n\n| Group                               | Request                                                     | Supported | TODO |\n|-------------------------------------|-------------------------------------------------------------|-----------|------|\n| Authentication/OAuth                | 1. Get Responsible Identity Service                         | ✅         |      |\n| Authentication/OAuth                | 2. Get Identity Service Configuration                       | ✅         |      |\n| Authentication/OAuth                | 3.a Request Token w/ Username \u0026 Password                    | ✅         |      |\n| Authentication/OAuth                | 3.b Request Token w/ a DocuWare Token                       | 🕣        |      |\n| Authentication/OAuth                | 3.c Request Token w/ Username \u0026 Password (Trusted User)     | 🕣        |      |\n| Authentication/OAuth                | 3.d.1 Obtain Windows Authorization (On Premises Only)       | 🕣        |      |\n| Authentication/OAuth                | 3.d.2 Request Token /w a Windows Account (On Premises Only) | 🕣        |      |\n| General/Organisation                | Get Login Token                                             | ✅         |      |\n| General/Organisation                | Get Organization                                            | ✅         |      |\n| General/Organisation                | Get All File Cabinets and Document Trays                    | ✅         |      |\n| General/UserManagement              | Get Users by ID                                             | ✅         |      |\n| General/UserManagement              | Get Users of a Role                                         | ✅         |      |\n| General/UserManagement              | Get Users of a Group                                        | ✅         |      |\n| General/UserManagement              | Create User                                                 | ✅         |      |\n| General/UserManagement              | Update User                                                 | ✅         |      |\n| General/UserManagement              | Get Groups                                                  | ✅         |      |\n| General/UserManagement              | Get All Groups for a Specific User                          | ✅         |      |\n| General/UserManagement              | Add User to a Group                                         | ✅         |      |\n| General/UserManagement              | Remove User from a Group                                    | ✅         |      |\n| General/UserManagement              | Get Roles                                                   | ✅         |      |\n| General/UserManagement              | Get All Roles for a Specific User                           | ✅         |      |\n| General/UserManagement              | Add User to a Role                                          | ✅         |      |\n| General/UserManagement              | Remove User from a Role                                     | ✅         |      |\n| FileCabinets/General                | Get File Cabinet Information                                | ✅         |      |\n| FileCabinets/General                | Get Total Number of Documents                               | ✅         |      |\n| FileCabinets/Dialogs                | Get All Dialogs                                             | ✅         |      |\n| FileCabinets/Dialogs                | Get a Specific Dialog                                       | ✅         |      |\n| FileCabinets/Dialogs                | Get Dialogs of a Specific Type                              | ✅         |      |\n| FileCabinets/Search                 | Get Documents from a File Cabinet                           | ✅         |      |\n| FileCabinets/Search                 | Get a Specific Document From a File Cabinet                 | ✅         |      |\n| FileCabinets/Search                 | Search for Documents in a Single File Cabinet               | ✅         |      |\n| FileCabinets/Search                 | Search for Documents in Multiple File Cabinets              | ✅         |      |\n| FileCabinets/CheckInCheckOut        | Check-out \u0026 Download a Document                             | 🕣        |      |\n| FileCabinets/CheckInCheckOut        | Check-in a Document from the File System                    | 🕣        |      |\n| FileCabinets/CheckInCheckOut        | Undo Check-out                                              | 🕣        |      |\n| FileCabinets/SelectLists            | Get Select Lists \u0026 Get Filtered Select Lists                | ✅         |      |\n| FileCabinets/Upload                 | Create Data Record                                          | ✅         |      |\n| FileCabinets/Upload                 | Append File(s) to a Data Record                             | ✅         |      |\n| FileCabinets/Upload                 | Upload a Single File for a Data Record                      | ❌         | -    |\n| FileCabinets/Upload                 | Create a Data Record \u0026 Upload File                          | ❌         | -    |\n| FileCabinets/Upload                 | Create Data Record \u0026 Upload File Using Store Dialog         | ❌         | -    |\n| FileCabinets/Upload                 | Append a Single PDF to a Document                           | ✅         | -    |\n| FileCabinets/Upload                 | Replace a PDF Document Section                              | ✅         |      |\n| FileCabinets/BatchIndexFieldsUpdate | Batch Update Index Fields By Id                             | ❌         | -    |\n| FileCabinets/BatchIndexFieldsUpdate | Batch Update Index Fields By Search                         | ❌         | -    |\n| FileCabinets/BatchIndexFieldsUpdate | Batch Append/Update Keyword Fields By Id                    | ❌         | -    |\n| Documents/UpdateIndexValues         | Update Index Values                                         | ✅         |      |\n| Documents/UpdateIndexValues         | Update Table Field Values                                   | ❌         | - ?  |\n| Documents/ModifyDocuments           | Transfer Document                                           | ✅         |      |\n| Documents/ModifyDocuments           | Delete Document                                             | ✅         |      |\n| Documents/ClipUnclip\u0026StapleUnstaple | Clip                                                        | ✅         |      |\n| Documents/ClipUnclip\u0026StapleUnstaple | Unclip                                                      | ✅         |      |\n| Documents/ClipUnclip\u0026StapleUnstaple | Staple                                                      | ✅         |      |\n| Documents/ClipUnclip\u0026StapleUnstaple | Unstaple                                                    | ✅         |      |\n| Documents/AnnotationsStamps         | AddStampWithPosition                                        | 🕣        |      |\n| Documents/AnnotationsStamps         | AddStampWithBestPosition                                    | 🕣        |      |\n| Documents/AnnotationsStamps         | AddTextAnnotation                                           | 🕣        |      |\n| Documents/AnnotationsStamps         | AddRectEntryAnnotation                                      | 🕣        |      |\n| Documents/AnnotationsStamps         | AddLineEntryAnnotation                                      | 🕣        |      |\n| Documents/AnnotationsStamps         | AddPolyLineEntryAnnotation                                  | ❌         | -    |\n| Documents/AnnotationsStamps         | DeleteAnnotation                                            | ❌         | -    |\n| Documents/AnnotationsStamps         | UpdateTextAnnotation                                        | 🕣        |      |\n| Documents/AnnotationsStamps         | Get Stamps                                                  | ❌         | -    |\n| Documents/DocumentsTrashBin         | Get Documents                                               | ✅         |      |\n| Documents/DocumentsTrashBin         | Delete Documents                                            | ✅         |      |\n| Documents/DocumentsTrashBin         | Restore Documents                                           | ✅         |      |\n| Documents/ApplicationProperties     | Get Application Properties                                  | ✅         |      |\n| Documents/ApplicationProperties     | Add Application Properties                                  | ✅         |      |\n| Documents/ApplicationProperties     | Delete Application Properties                               | ✅         |      |\n| Documents/ApplicationProperties     | Update Application Properties                               | ✅         |      |\n| Documents/Sections                  | Get All Sections from a Document                            | ✅         |      |\n| Documents/Sections                  | Get a Specific Section                                      | ✅         |      |\n| Documents/Sections                  | Delete Section                                              | ✅         |      |\n| Documents/Sections/Textshot         | Get Textshot for a Specific Section                         | ✅         |      |\n| Documents/Download                  | Download Document                                           | ✅         |      |\n| Documents/Download                  | Download Section                                            | ✅         |      |\n| Documents/Download                  | Download Thumbnail                                          | ✅         |      |\n| Workflow                            | Get Document Workflow History                               | ✅         |      |\n| Workflow                            | Get Document Workflow History Steps                         | ✅         |      |\n\n\u003c/details\u003e\n\n\n## ⚙️ Installation\n\nYou can install the package via composer:\n\n```bash\ncomposer require codebar-ag/laravel-docuware\n```\n\nAdd the following environment variables to your `.env` file:\n\n```bash\nDOCUWARE_URL=https://domain.docuware.cloud\nDOCUWARE_USERNAME=user@domain.test\nDOCUWARE_PASSWORD=password\nDOCUWARE_PASSPHRASE=\"passphrase\"\nDOCUWARE_TIMEOUT=30\nDOCUWARE_CACHE_DRIVER=file\nDOCUWARE_CACHE_LIFETIME_IN_SECONDS=60\nDOCUWARE_CLIENT_ID=docuware.platform.net.client\nDOCUWARE_SCOPE=docuware.platform\n```\n\nWith the passphrase we are able to encrypt the URLs.\n\n⚠️ You need to escape backslashes in your passphrase with another backslash:\n\n```bash \n# ❌ Passphrase contains a backslash and is not escaped:\nDOCUWARE_PASSPHRASE=\"a#bcd\u003e2~C1'abc\\#\"\n\n# ✅ We need to escape the backslash with another backslash:\nDOCUWARE_PASSPHRASE=\"a#bcd\u003e2~C1'abc\\\\#\"\n```\n\n## 🏗 Usage\n\n### Getting Started with OAuth\n\u003e This package automatically handles the generation of OAuth token for you and stores them in cache.\n\n### Getting a new token via Username \u0026 Password:\n\n```php\nuse CodebarAg\\DocuWare\\Connectors\\DocuWareConnector;\nuse CodebarAg\\DocuWare\\DTO\\Config\\ConfigWithCredentials;\n\n$connector = new DocuWareConnector(\n    configuration: new ConfigWithCredentials(\n        username: 'username',\n        password: 'password',\n    )\n);\n```\n\n### Getting a new token via Username \u0026 Password (Trusted User):\n\n```php\nuse CodebarAg\\DocuWare\\Connectors\\DocuWareConnector;\nuse CodebarAg\\DocuWare\\DTO\\Config\\ConfigWithCredentialsTrustedUser;\n\n$connector = new DocuWareConnector(\n    configuration: new ConfigWithCredentialsTrustedUser(\n        username: 'username',\n        password: 'password',\n        impersonatedUsername: 'impersonatedUsername',\n    )\n);\n```\n\n### Enums\n\nThe package provides several enums to ensure type safety and consistency when working with DocuWare API values.\n\n#### ConnectionEnum\n\nRepresents different connection types for DocuWare authentication:\n\n```php\nuse CodebarAg\\DocuWare\\Enums\\ConnectionEnum;\n\nConnectionEnum::WITHOUT_COOKIE;    \nConnectionEnum::STATIC_COOKIE; \nConnectionEnum::DYNAMIC_COOKIE;\n```\n\n#### DialogType\n\nRepresents different types of dialogs in DocuWare:\n\n```php\nuse CodebarAg\\DocuWare\\Enums\\DialogType;\n\nDialogType::SEARCH; \nDialogType::STORE;\nDialogType::RESULT;\nDialogType::INDEX; \nDialogType::LIST; \nDialogType::FOLDERS; \n```\n\n#### DocuWareFieldTypeEnum\n\nRepresents different field types used in DocuWare document indexing:\n\n```php\nuse CodebarAg\\DocuWare\\Enums\\DocuWareFieldTypeEnum;\n\nDocuWareFieldTypeEnum::STRING;\nDocuWareFieldTypeEnum::INT; \nDocuWareFieldTypeEnum::DECIMAL;\nDocuWareFieldTypeEnum::DATE;\nDocuWareFieldTypeEnum::DATETIME;\nDocuWareFieldTypeEnum::TABLE;\n```\n\n### Available Requests\n\nThe following sections provide examples for each available request type. All functionality is documented inline below with code examples.\n\n#### Organization\n\n| Request                                                     | Supported |\n|-------------------------------------------------------------|-----------|\n| Get Login Token                                             | ✅         |\n| Get Organization                                            | ✅         |\n| Get All File Cabinets and Document Trays                    | ✅         |\n\n\n##### Get Organization\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\Organization\\GetOrganization;\n\n$organizations = $this-\u003econnector-\u003esend(new GetOrganization())-\u003edto();\n```\n\n##### Get All File Cabinets And Document Trays\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\Organization\\GetAllFileCabinetsAndDocumentTrays;\n\n$cabinetsAndTrays = $this-\u003econnector-\u003esend(new GetAllFileCabinetsAndDocumentTrays())-\u003edto();\n```\n\n#### User Management\n\n##### Get Users\n\n| Request              | Supported |\n|----------------------|-----------|\n| Get Users            | ✅         |\n| Get Users by ID      | ✅         |\n| Get Users of a Role  | ✅         |\n| Get Users of a Group | ✅         |\n\n###### Get Users\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetUsers\\GetUsers;\n\n$users = $this-\u003econnector-\u003esend(new GetUsers())-\u003edto();\n```\n\n###### Get User By Id\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetUsers\\GetUserById;\n\n$user = $this-\u003econnector-\u003esend(new GetUserById($userId))-\u003edto();\n```\n\n###### Get Users Of A Role\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfARole;\n\n$users = $this-\u003econnector-\u003esend(new GetUsersOfARole($roleId))-\u003edto();\n```\n\n###### Get Users Of A Group\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfAGroup;\n\n$users = $this-\u003econnector-\u003esend(new GetUsersOfAGroup($groupId))-\u003edto();\n```\n\n##### Create/Update Users\n\n| Request     | Supported |\n|-------------|-----------|\n| Create User | ✅         |\n| Update User | ✅         |\n\n###### Create User\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUser;\n\n$user = $connector-\u003esend(new CreateUser(new User(\n    name: $timestamp.' - Test User',\n    dbName: $timestamp,\n    email: $timestamp.'-test@example.test',\n    password: 'TESTPASSWORD',\n)))-\u003edto();\n```\n\n###### Update User\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\CreateUpdateUsers\\UpdateUser;\n\n$user-\u003ename .= ' - Updated';\n$user-\u003eactive = false;\n\n$user = $connector-\u003esend(new UpdateUser($user))-\u003edto();\n```\n\n##### Get/Modify Groups\n\n| Request                            | Supported |\n|------------------------------------|-----------|\n| Get Groups                         | ✅         |\n| Get All Groups for a Specific User | ✅         |\n| Add User to a Group                | ✅         |\n| Remove User from a Group           | ✅         |\n\n###### Get Groups\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyGroups\\GetGroups;\n\n$groups = $connector-\u003esend(new GetGroups())-\u003edto();\n```\n\n###### Get All Groups For A Specific User\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyGroups\\GetAllGroupsForASpecificUser;\n\n$groups = $connector-\u003esend(new GetAllGroupsForASpecificUser($userId))-\u003edto();\n```\n\n###### Add User To A Group\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyGroups\\AddUserToAGroup;\n\n$response = $connector-\u003esend(new AddUserToAGroup(\n    userId: $userId,\n    ids: [$groupId],\n))-\u003edto();\n```\n\n###### Remove User From A Group\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyGroups\\RemoveUserFromAGroup;\n\n$response = $connector-\u003esend(new RemoveUserFromAGroup(\n    userId: $userId,\n    ids: [$groupId],\n))-\u003edto();\n```\n\n##### Get/Modify Roles\n\n| Request                           | Supported |\n|-----------------------------------|-----------|\n| Get Roles                         | ✅         |\n| Get All Roles for a Specific User | ✅         |\n| Add User to a Role                | ✅         |\n| Remove User from a Role           | ✅         |\n\n###### Get Roles\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyRoles\\GetRoles;\n\n$roles = $this-\u003econnector-\u003esend(new GetRoles())-\u003edto();\n```\n\n###### Get All Roles For A Specific User\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyRoles\\GetAllRolesForASpecificUser;\n\n$roles = $connector-\u003esend(new GetAllRolesForASpecificUser($userId))-\u003edto();\n```\n\n###### Add User To A Role\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyRoles\\AddUserToARole;\n\n$response = $connector-\u003esend(new AddUserToARole(\n    userId: $userId,\n    ids: [$roleId],\n))-\u003edto();\n```\n\n###### Remove User From A Role\n```php\nuse CodebarAg\\DocuWare\\Requests\\General\\UserManagement\\GetModifyRoles\\RemoveUserFromARole;\n\n$response = $connector-\u003esend(new RemoveUserFromARole(\n    userId: $userId,\n    ids: [$roleId],\n))-\u003edto();\n```\n\n#### File Cabinets\n\n##### General\n\n| Request                       | Supported |\n|-------------------------------|-----------|\n| Get File Cabinet Information  | ✅         |\n| Get Total Number of Documents | ✅         |\n\n###### Get File Cabinet Information\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\General\\GetFileCabinetInformation;\n\n$fileCabinet = $connector-\u003esend(new GetFileCabinetInformation($fileCabinetId))-\u003edto();\n```\n\n###### Get Total Number Of Documents\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\General\\GetTotalNumberOfDocuments;\n\n$count = $connector-\u003esend(new GetTotalNumberOfDocuments(\n    $fileCabinetId,\n    $dialogId\n))-\u003edto();\n```\n\n##### Dialogs\n\n| Request                        | Supported |\n|--------------------------------|-----------|\n| Get All Dialogs                | ✅         |\n| Get a Specific Dialog          | ✅         |\n| Get Dialogs of a Specific Type | ✅         |\n\n###### Get All Dialogs\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Dialogs\\GetAllDialogs;\n\n$dialogs = $connector-\u003esend(new GetAllDialogs($fileCabinetId))-\u003edto();\n```\n\n###### Get Dialogs of a Specific Type\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Dialogs\\GetASpecificDialog;\n\n$dialog = $connector-\u003esend(new GetASpecificDialog($fileCabinetId, $dialogId))-\u003edto();\n```\n\n###### Get Dialogs Of A Specific Type\n```php\nuse CodebarAg\\DocuWare\\Enums\\DialogType;\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Dialogs\\GetDialogsOfASpecificType;\n\n$dialogs = $connector-\u003esend(new GetDialogsOfASpecificType($fileCabinetId, DialogType::SEARCH))-\u003edto();\n```\n\n##### Search\n\n| Description                                    | Implemented |\n|------------------------------------------------|-------------|\n| Get Documents from a File Cabinet              | ✅           |\n| Get a Specific Document From a File Cabinet    | ✅           |\n| Search for Documents in a Single File Cabinet  | ✅           |\n| Search for Documents in Multiple File Cabinets | ✅           |\n\n###### Get A Specific Document From A File Cabinet\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Search\\GetASpecificDocumentFromAFileCabinet;\n\n$document = $connector-\u003esend(new GetASpecificDocumentFromAFileCabinet(\n    $fileCabinetId,\n    $documentId\n))-\u003edto();\n```\n\n######  Get Documents From A File Cabinet\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Search\\GetDocumentsFromAFileCabinet;\n\n$documents = $connector-\u003esend(new GetDocumentsFromAFileCabinet(\n    $fileCabinetId\n))-\u003edto();\n```\n\n###### Most basic example to search for documents.\n\u003e You only need to provide a valid file cabinet id.\n```php\n$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf';\n\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($fileCabinetId)\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Search in multiple file cabinets\n\u003e Provide an array of file cabinet ids.\n```php\n$fileCabinetIds = [\n    '0ee72de3-4258-4353-8020-6a3ff6dd650f',\n    '3f9cb4ff-82f2-44dc-b439-dd648269064f',\n];\n\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinets($fileCabinetIds)\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Find results on the next page\n\u003e Default: 1\n```php\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003epage(2)\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Define the number of results which should be shown per page\n\u003e Default: 50\n```php\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003eperPage(30)\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Use the full-text search\n\u003e You have to activate full-text search in your file cabinet before you can use this feature.\n```php \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003efulltext('My secret document')\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Search documents which are created from the first of march.\n```php \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003efilterDate('DWSTOREDATETIME', '\u003e=', Carbon::create(2021, 3, 1))\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Search documents which are created until the first of april.\n```php \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003efilterDate('DWSTOREDATETIME', '\u003c', Carbon::create(2021, 4, 1))\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Order the results by field name.\n\u003e Supported values: 'asc', 'desc'\n```php\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003eorderBy('DWSTOREDATETIME', 'desc')\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Search documents filtered to the value.\n\u003e You can specify multiple filters.\n```php \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003efilter('TYPE', 'Order')\n    -\u003efilter('OTHER_FIELD', 'other')\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### Search documents filtered to multiple values.\n```php \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003efilterIn('TYPE', ['Order', 'Invoice'])\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### You can specify the dialog which should be used.\n```php \n$dialogId = 'bb42c30a-89fc-4b81-9091-d7e326caba62';\n\n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003edialog($dialogId)\n    -\u003eget();\n    \n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n###### You can also combine everything.\n```php  \n$paginatorRequest = DocuWare::searchRequestBuilder()\n    -\u003efileCabinet($id)\n    -\u003epage(2)\n    -\u003eperPage(30)\n    -\u003efulltext('My secret document')\n    -\u003efilterDate('DWSTOREDATETIME', '\u003e=', Carbon::create(2021, 3, 1))\n    -\u003efilterDate('DWSTOREDATETIME','\u003c',Carbon::create(2021, 4, 1))\n    -\u003efilter('TYPE', 'Order')\n    -\u003efilter('OTHER_FIELD', 'other')\n    -\u003eorderBy('DWSTOREDATETIME', 'desc')\n    -\u003edialog($dialogId)\n    -\u003eget();\n\n$paginator = $connector-\u003esend($paginatorRequest)-\u003edto();\n```\n\n\n##### Check In Check Out\n\n| Request                                                     | Supported |\n|-------------------------------------------------------------|-----------|\n| Check-out \u0026 Download a Document                             | 🕣        |\n| Check-in a Document from the File System                    | 🕣        |\n| Undo Check-out                                              | 🕣        |\n\n\u003e Not Currently Supported\n\n##### Select Lists\n| Request                                      | Supported |\n|----------------------------------------------|-----------|\n| Get Select Lists \u0026 Get Filtered Select Lists | ✅         |\n\n###### Get Select Lists\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\SelectLists\\GetSelectLists;\n\n$types = $this-\u003econnector-\u003esend(new GetSelectLists(\n    $fileCabinetId,\n    $dialogId,\n    $fieldName,\n))-\u003edto();\n```\n\n##### Upload\n\n| Request                                             | Supported |\n|-----------------------------------------------------|-----------|\n| Create Data Record                                  | ✅         |\n| Append File(s) to a Data Record                     | ✅         |\n| Upload a Single File for a Data Record              | ❌         |\n| Create a Data Record \u0026 Upload File                  | ❌         |\n| Create Data Record \u0026 Upload File Using Store Dialog | ❌         |\n| Append a Single PDF to a Document                   | ❌         |\n| Replace a PDF Document Section                      | ❌         |\n\n###### Create Data Record\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Upload\\CreateDataRecord;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTextDTO;\n\n$document = $connector-\u003esend(new CreateDataRecord(\n    $fileCabinetId,\n    null,\n    null,\n    collect([\n        IndexTextDTO::make('DOCUMENT_LABEL', '::data-entry::'),\n    ]),\n))-\u003edto();\n```\n\n###### Create Table Data Record\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Upload\\CreateDataRecord;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateTimeDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDecimalDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexNumericDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTableDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTextDTO;\n\n$tableRows = collect([\n    collect([\n        IndexTextDTO::make('TEXT', 'project_1'),\n        IndexNumericDTO::make('INT', 1),\n        IndexDecimalDTO::make('DECIMAL', 1.1),\n        IndexDateDTO::make('DATE', $now),\n        IndexDateTimeDTO::make('DATETIME', $now),\n    ]),\n    collect([\n        IndexTextDTO::make('TEXT', 'project_2'),\n        IndexNumericDTO::make('INT', 2),\n        IndexDecimalDTO::make('DECIMAL', 2.2),\n        IndexDateDTO::make('DATE', $now),\n        IndexDateTimeDTO::make('DATETIME', $now),\n    ]),\n]);\n\n\n$document = $connector-\u003esend(new CreateDataRecord(\n    $fileCabinetId,\n    null,\n    null,\n    collect([\n        IndexTableDTO::make('TABLE_NAME', $tableRows)\n    ]),\n))-\u003edto();\n```\n\n###### Append File(s) To A Data Record\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecord;\nuse Saloon\\Data\\MultipartValue;\n\n$response = $connector-\u003esend(\n    new AppendFilesToADataRecord(\n        fileCabinetId: $fileCabinetId,\n        dataRecordId: $document-\u003eid,\n        files: collect([\n            new MultipartValue(\n                name: 'File[]',\n                value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-2.pdf'),\n                filename: 'test-2.pdf',\n            ),\n            new MultipartValue(\n                name: 'File[]',\n                value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-3.pdf'),\n                filename: 'test-3.pdf',\n            ),\n        ])\n    )\n)-\u003edto();\n```\n\n###### Append A Single PDF To A Document\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Upload\\AppendASinglePDFToADocument;\n\n$response = $this-\u003econnector-\u003esend(new AppendASinglePDFToADocument(\n    fileCabinetId: $fileCabinetId,\n    documentId: $document-\u003eid,\n    fileContent: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-2.pdf'),\n    fileName: 'test-2.pdf',\n))-\u003edto();\n```\n\n###### Replace A PDF Document Section\n```php\nuse CodebarAg\\DocuWare\\Requests\\FileCabinets\\Upload\\ReplaceAPDFDocumentSection;\n\n$response = $this-\u003econnector-\u003esend(new ReplaceAPDFDocumentSection(\n    fileCabinetId: $fileCabinetId,\n    sectionId: $documentWithSections-\u003esections-\u003efirst()-\u003eid,\n    fileContent: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-3.pdf'),\n    fileName: 'test-3.pdf',\n))-\u003edto();\n```\n\n###### Batch Index Fields Update\n| Request                                  | Supported |\n|------------------------------------------|-----------|\n| Batch Update Index Fields By Id          | ❌         |\n| Batch Update Index Fields By Search      | ❌         |\n| Batch Append/Update Keyword Fields By Id | ❌         |\n\n\u003e Not Currently Supported\n\n###### Get Fields\n```php\nuse CodebarAg\\DocuWare\\Requests\\Fields\\GetFieldsRequest;\n\n$fields = $connector-\u003esend(new GetFieldsRequest($fileCabinetId))-\u003edto();\n```\n\n#### Documents\n\n##### Update Index Values\n| Request                   | Supported |\n|---------------------------|-----------|\n| Update Index Values       | ✅         |\n| Update Table Index Values | ✅         |\n| Update Table Field Values | ❌         |\n\n\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\UpdateIndexValues\\UpdateIndexValues;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateDTO;\n\n$response = $connector-\u003esend(new UpdateIndexValues(\n    $fileCabinetId,\n    $documentId,\n    collect([\n        IndexTextDTO::make('DOCUMENT_LABEL', '::new-data-entry::'),\n    ])\n))-\u003edto();\n```\n\n###### Update Table Data Record\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\UpdateIndexValues\\UpdateIndexValues;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateTimeDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDecimalDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexNumericDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTableDTO;\nuse CodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTextDTO;\n\n$tableRows = collect([\n    collect([\n        IndexTextDTO::make('TEXT', 'project_1'),\n        IndexNumericDTO::make('INT', 1),\n        IndexDecimalDTO::make('DECIMAL', 1.1),\n        IndexDateDTO::make('DATE', $now),\n        IndexDateTimeDTO::make('DATETIME', $now),\n    ]),\n    collect([\n        IndexTextDTO::make('TEXT', 'project_2'),\n        IndexNumericDTO::make('INT', 2),\n        IndexDecimalDTO::make('DECIMAL', 2.2),\n        IndexDateDTO::make('DATE', $now),\n        IndexDateTimeDTO::make('DATETIME', $now),\n    ]),\n]);\n\n\n$document = $connector-\u003esend(new UpdateIndexValues(\n    $fileCabinetId,\n    null,\n    null,\n    collect([\n        IndexTableDTO::make('TABLE_NAME', $tableRows)\n    ]),\n))-\u003edto();\n```\n\n##### Modify Documents\n| Request           | Supported |\n|-------------------|-----------|\n| Transfer Document | ✅         |\n| Delete Document   | ✅         |\n\n\n###### Transfer Document\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ModifyDocuments\\TransferDocument;\n\n$response = $connector-\u003esend(new TransferDocument(\n    $fileCabinetId,\n    $destinationFileCabinetId,\n    $storeDialogId,\n    $documentId,\n    $fields,\n))-\u003edto();\n```\n\n###### Delete Documents\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ModifyDocuments\\DeleteDocument;\n\n$connector-\u003esend(new DeleteDocument(\n    $fileCabinetId\n    $documentId,\n))-\u003edto();\n```\n\n##### Clip/Unclip \u0026 Staple/Unstaple\n| Request  | Supported |\n|----------|-----------|\n| Clip     | ✅         |\n| Unclip   | ✅         |\n| Staple   | ✅         |\n| Unstaple | ✅         |\n\n###### Clip\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ClipUnclipStapleUnstaple\\Clip;\n\n$clip = $connector-\u003esend(new Clip(\n    $fileCabinetId,\n    [\n        $documentId,\n        $document2Id,\n    ]\n))-\u003edto();\n```\n\n###### Unclip\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ClipUnclipStapleUnstaple\\Unclip;\n\n$unclip = $connector-\u003esend(new Unclip(\n    $fileCabinetId,\n    $clipId\n))-\u003edto();\n```\n\n###### Staple\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ClipUnclipStapleUnstaple\\Staple;\n\n$staple = $connector-\u003esend(new Staple(\n    $fileCabinetId,\n    [\n        $documentId,\n        $document2Id,\n    ]\n))-\u003edto();\n```\n\n###### Unstaple\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ClipUnclipStapleUnstaple\\Unstaple;\n\n$unclip = $connector-\u003esend(new Unstaple(\n    $fileCabinetId,\n    $stapleId\n))-\u003edto();\n```\n\n##### Annotations/Stamps\n| Request                    | Supported |\n|----------------------------|-----------|\n| AddStampWithPosition       | 🕣        |\n| AddStampWithBestPosition   | 🕣        |\n| AddTextAnnotation          | 🕣        |\n| AddRectEntryAnnotation     | 🕣        |\n| AddLineEntryAnnotation     | 🕣        |\n| AddPolyLineEntryAnnotation | ❌         |\n| DeleteAnnotation           | ❌         |\n| UpdateTextAnnotation       | 🕣        |\n| Get Stamps                 | ❌         |\n\n\u003e Not Currently Supported\n\n###### Documents Trash Bin\n| Request           | Supported |\n|-------------------|-----------|\n| Get Documents     | ✅         |\n| Delete Documents  | ✅         |\n| Restore Documents | ✅         |\n\n\n###### Get Documents\n\u003e You can use the same methods as in the search usage. The only difference is that you have to use the `trashBin` method after the `searchRequestBuilder` method.\n```php\n\n\n```php\nuse CodebarAg\\DocuWare\\DocuWare;\n\n$paginatorRequest = (new DocuWare())\n    -\u003esearchRequestBuilder()\n    -\u003etrashBin()\n```\n\n###### Delete Documents\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\DocumentsTrashBin\\DeleteDocuments;\n\n$delete = $connector-\u003esend(new DeleteDocuments([$documentID, $document2ID]))-\u003edto();\n```\n\n###### Restore Documents\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\DocumentsTrashBin\\RestoreDocuments;\n\n$delete = $connector-\u003esend(new RestoreDocuments([$documentID, $document2ID]))-\u003edto();\n```\n\n##### Application Properties\n| Request                       | Supported |\n|-------------------------------|-----------|\n| Get Application Properties    | ✅         |\n| Add Application Properties    | ✅         |\n| Delete Application Properties | ✅         |\n| Update Application Properties | ✅         |\n\n\n###### Add Application Properties\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ApplicationProperties\\AddApplicationProperties;\n\n$addProperties = $connector-\u003esend(new AddApplicationProperties(\n    $fileCabinetId,\n    $documentId,\n    [\n        [\n            'Name' =\u003e 'Key1',\n            'Value' =\u003e 'Key1 Value',\n        ],\n        [\n            'Name' =\u003e 'Key2',\n            'Value' =\u003e 'Key2 Value',\n        ],\n    ],\n))-\u003edto();\n```\n\n###### Update Application Properties\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ApplicationProperties\\UpdateApplicationProperties;\n\n$updateProperties = $connector-\u003esend(new UpdateApplicationProperties(\n    $fileCabinetId,\n    $documentId,\n    [\n        [\n            'Name' =\u003e 'Key1',\n            'Value' =\u003e 'Key1 Value Updated',\n        ],\n    ],\n))-\u003edto()-\u003esortBy('Name');\n```\n\n###### Delete Application Properties\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ApplicationProperties\\DeleteApplicationProperties;\n\n$deleteProperties = $connector-\u003esend(new DeleteApplicationProperties(\n    $fileCabinetId,\n    $document-\u003eid,\n    [\n        'Key1',\n    ],\n))-\u003edto();\n```\n\n###### Get Application Properties\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\ApplicationProperties\\GetApplicationProperties;\n\n$properties = $connector-\u003esend(new GetApplicationProperties(\n    $fileCabinetId,\n    $document-\u003eid,\n))-\u003edto();\n```\n\n##### Sections\n\n| Request                          | Supported |\n|----------------------------------|-----------|\n| Get All Sections from a Document | ✅         |\n| Get a Specific Section           | ✅         |\n| Delete Section                   | ✅         |\n| Get Textshot                     | ✅         |\n\n###### Get All Sections\n\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Sections\\GetAllSectionsFromADocument;\n\n$sections = $connector-\u003esend(new GetAllSectionsFromADocument(\n    $fileCabinetId,\n    $documentId\n))-\u003edto();\n```\n\n###### Get Specific Section\n\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Sections\\GetASpecificSection;\n\n$section = $connector-\u003esend(new GetASpecificSection(\n    $fileCabinetId,\n    $sectionsId\n))-\u003edto();\n```\n\n###### Delete Section\n\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Sections\\DeleteSection;\n\n$deleted = $connector-\u003esend(new DeleteSection(\n    $fileCabinetId,\n    $sectionId\n))-\u003edto();\n```\n\n###### Get Textshot\n\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Sections\\GetTextshot;\n\n$deleted = $connector-\u003esend(new GetTextshot(\n    $fileCabinetId,\n    $sectionId\n))-\u003edto();\n```\n\n##### Download\n| Request            | Supported |\n|--------------------|-----------|\n| Download Document  | ✅         |\n| Download Section   | ✅         |\n| Download Thumbnail | ✅         |\n\n\n###### Download Document\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Download\\DownloadDocument;\n\n$contents = $connector-\u003esend(new DownloadDocument(\n    $fileCabinetId,\n    $documentId\n))-\u003edto();\n```\n\n###### Download Section\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Download\\DownloadSection;\n\n$contents = $connector-\u003esend(new DownloadSection(\n    $fileCabinetId,\n    $sectionId\n))-\u003edto();\n```\n\n###### Download Thumbnail\n```php\nuse CodebarAg\\DocuWare\\Requests\\Documents\\Download\\DownloadThumbnail;\n\n$contents = $connector-\u003esend(new DownloadThumbnail(\n    $fileCabinetId,\n    $sectionId\n))-\u003edto();\n```\n\n#### Workflow\n\n##### Workflow History\n| Request                             | Supported |\n|-------------------------------------|-----------|\n| Get Document Workflow History       | ✅         |\n| Get Document Workflow History Steps | ✅         |\n\n###### Get Document Workflow History\n```php\nuse CodebarAg\\DocuWare\\Requests\\Workflow\\GetDocumentWorkflowHistory;\n\n$history = $this-\u003econnector-\u003esend(new GetDocumentWorkflowHistory(\n    $fileCabinetId,\n    $documentId\n))-\u003edto();\n```\n\n###### Get Document Workflow History Steps\n```php\nuse CodebarAg\\DocuWare\\Requests\\Workflow\\GetDocumentWorkflowHistorySteps;\n\n$historySteps = $this-\u003econnector-\u003esend(new GetDocumentWorkflowHistorySteps(\n    $workflowId,\n    $historyId,\n))-\u003edto();\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Extending the connector (EXAMPLE)\n\n\u003e We understand it may be repetitive to pass the configuration every time you create a new connector.\n\u003e\n\u003e You can extend the connector and set the configuration once.\n\n#### Create a new connector\n\n```php\n\u003c?php\n\nnamespace App\\Connectors;\n\nuse CodebarAg\\DocuWare\\Connectors\\DocuWareConnector;\nuse CodebarAg\\DocuWare\\DTO\\Config\\ConfigWithCredentials;\n\nclass YourOwnDocuWareConnector extends DocuWareConnector\n{\n    public function __construct() {\n        $configuration = new ConfigWithCredentials(\n            username: 'username',\n            password: 'password',\n        );\n    \n        parent::__construct($configuration);\n    }\n}\n```\n\n#### Use the new connector\n\n```php\nuse App\\Connectors\\YourOwnDocuWareConnector;\nuse CodebarAg\\DocuWare\\DTO\\Config\\ConfigWithCredentials;\n\n$connector = new YourOwnDocuWareConnector();\n```\n\n## 🖼 Make encrypted URLs\n\n```php\nuse CodebarAg\\DocuWare\\Facades\\DocuWare;\n```\n\n### Make encrypted URL for a document in a file cabinet.\n```php \n$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf';\n$documentId = 42;\n\n$url = DocuWare::url()\n    -\u003efileCabinet($fileCabinetId)\n    -\u003edocument($documentId)\n    -\u003emake();\n```\n\n### Make encrypted URL for a document in a basket.\n```php \n$basketId = 'b_87356f8d-e50c-450b-909c-4eaccd318fbf';\n\n$url = DocuWare::url()\n    -\u003ebasket($basketId)\n    -\u003edocument($documentId)\n    -\u003emake();\n```\n\n### Make encrypted URL valid for a specific amount of time.\n\u003e  In the example below the URL is valid for one week, afterward the URL is no longer working.\n```php\n$url = DocuWare::url()\n    -\u003efileCabinet($fileCabinetId)\n    -\u003edocument($documentId)\n    -\u003evalidUntil(now()-\u003eaddWeek())\n    -\u003emake();\n```\n\n\n## 🏋️ Document Index Fields DTO showcase\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexTextDTO {\n  +name: \"FIELD_TEXT\"                               // string\n  +value: \"Value\"                                   // null|string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexNumericDTO {\n  +name: \"FIELD_NUMERIC\"                            // string\n  +value: 1                                         // null|int\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDecimalDTO {\n  +name: \"FIELD_DECIMAL\"                            // string\n  +value: 1.00                                      // null|int|float\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateDTO {\n  +name: \"FIELD_DATE\"                               // string\n  +value: now(),                                    // null|Carbon\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexDateTimeDTO {\n  +name: \"FIELD_DATETIME\"                           // string\n  +value: now(),                                    // null|Carbon\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexKeywordDTO {\n  +name: \"FIELD_KEYWORD\"                            // string\n  +value: \"Value\"                                   // null|string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Documents\\DocumentIndex\\IndexMemoDTO {\n  +name: \"FIELD_MEMO\"                               // string\n  +value: \"Value\"                                   // null|string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\OrganizationIndex {\n  +id: \"2f071481-095d-4363-abd9-29ef845a8b05\"              // string\n  +name: \"Fake File Cabinet\"                               // string\n  +guid: \"1334c006-f095-4ae7-892b-fe59282c8bed\"            // string|null\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Organization {\n  +id: \"2f071481-095d-4363-abd9-29ef845a8b05\"              // string\n  +name: \"Fake File Cabinet\"                               // string\n  +guid: \"1334c006-f095-4ae7-892b-fe59282c8bed\"            // string|null\n  +additionalInfo: []                                      // array\n  +configurationRights: []                                 // array\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\FileCabinet {\n  +id: \"2f071481-095d-4363-abd9-29ef845a8b05\"              // string\n  +name: \"Fake File Cabinet\"                               // string\n  +color: \"Yellow\"                                         // string\n  +isBasket: true                                          // bool\n  +assignedCabinet: \"889c13cc-c636-4759-a704-1e6500d2d70f\" // string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Dialog {\n  +id: \"fae3b667-53e9-48dd-9004-34647a26112e\"            // string\n  +type: \"ResultList\"                                    // string\n  +label: \"Fake Dialog\"                                  // string\n  +isDefault: true                                       // boolean\n  +fileCabinetId: \"1334c006-f095-4ae7-892b-fe59282c8bed\" // string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Field {\n  +name: \"FAKE_FIELD\"  // string\n  +label: \"Fake Field\" // string\n  +type: \"Memo\"        // string\n  +scope: \"User\"       // string\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Field {\n  +name: \"FAKE_FIELD\"  // string\n  +label: \"Fake Field\" // string\n  +type: \"Memo\"        // string\n  +scope: \"User\"       // string\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Document {\n  +id: 659732                                              // integer\n  +file_size: 765336                                       // integer\n  +total_pages: 100                                        // integer\n  +title: \"Fake Title\"                                     // string\n  +extension: \".pdf\"                                       // string\n  +content_type: \"application/pdf\"                         // string\n  +file_cabinet_id: \"a233b03d-dc63-42dd-b774-25b3ff77548f\" // string\n  +created_at: Illuminate\\Support\\Carbon                   // Carbon\n  +updated_at: Illuminate\\Support\\Carbon                   // Carbon\n  +fields: Illuminate\\Support\\Collection {                 // Collection|DocumentField[]\n    #items: array:2 [\n      0 =\u003e CodebarAg\\DocuWare\\DTO\\DocumentField            // DocumentField\n      1 =\u003e CodebarAg\\DocuWare\\DTO\\DocumentField            // DocumentField\n    ]\n  }\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\Section {#23784▶\n  +id: \"5589-5525\"\n  +contentType: \"text/plain\"\n  +haveMorePages: true\n  +pageCount: 1\n  +fileSize: 32\n  +originalFileName: \"example.txt\"\n  +contentModified: \"/Date(1702395557000)/\"\n  +annotationsPreview: false\n  +hasTextAnnotations: null\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\DocumentThumbnail {\n  +mime: \"image/png\"                                        // string\n  +data: \"somedata\"                                         // string\n  +base64: \"data:image/png;base64,WXpJNWRGcFhVbWhrUjBVOQ==\" // string\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\TableRow {\n   +fields: Illuminate\\Support\\Collection {                 // Collection|DocumentField[]\n    #items: array:2 [\n      0 =\u003e CodebarAg\\DocuWare\\DTO\\DocumentField            // DocumentField\n      1 =\u003e CodebarAg\\DocuWare\\DTO\\DocumentField            // DocumentField\n    ]\n}\n```\n\n```php\nCodebarAg\\DocuWare\\DTO\\DocumentPaginator\n  +total: 39                                  // integer\n  +per_page: 10                               // integer\n  +current_page: 9                            // integer\n  +last_page: 15                              // integer\n  +from: 1                                    // integer\n  +to: 10                                     // integer\n  +documents: Illuminate\\Support\\Collection { // Collection|Document[]\n    #items: array:2 [\n      0 =\u003e CodebarAg\\DocuWare\\DTO\\Document    // Document\n      1 =\u003e CodebarAg\\DocuWare\\DTO\\Document    // Document\n    ]\n  }\n  +error: CodebarAg\\DocuWare\\DTO\\ErrorBag {   // ErrorBag|null\n    +code: 422                                // int\n    +message: \"'000' is not valid cabinet id\" // string\n  }\n}\n```\n\n\n## 📦 Caching requests\n\n\u003e All Get Requests are cachable and will be cached by default. To determine if the response is cached you can use the following method:\n\n### Is Cached\n```php \n$connector = new DocuWareConnector();\n\n$response = $connector-\u003esend(new GetDocumentRequest($fileCabinetId, $documentId));\n$response-\u003eisCached(); // false\n\n// Next time the request is sent\n\n$response = $connector-\u003esend(new GetDocumentRequest($fileCabinetId, $documentId));\n$response-\u003eisCached(); // true\n```\n\n\n### Invalidate Cache\n\u003e To invalidate the cache for a specific request you can use the following method:\n```php \n$connector = new DocuWareConnector();\n\n$request = new GetDocumentRequest($fileCabinetId, $documentId);\n$request-\u003einvalidateCache();\n\n$response = $connector-\u003esend($request);\n```\n\n### Disable Caching\n\u003e To temporarily disable caching for a specific request you can use the following method:\n```php \n$connector = new DocuWareConnector();\n\n$request = new GetDocumentRequest($fileCabinetId, $documentId);\n$request-\u003edisableCaching();\n\n$response = $connector-\u003esend($request);\n```\n\n\n## 💥 Exceptions explained\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToMakeRequest`\n\nThis is thrown if you are not authorized to make the request.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToProcessRequest`\n\nThis is thrown if you passed wrong attributes. For example a file cabinet ID\nwhich does not exist.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToLogin`\n\nThis exception can only be thrown during the login if the credentials did not\nmatch.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToLoginNoCookies`\n\nThis exception can only be thrown during the login if there was no cookies in\nthe response from the api.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToFindPassphrase`\n\nThis exception can only be thrown during the url making if the passphrase\ncould not be found.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToMakeUrl`\n\nSomething is wrong during the URL making.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToUpdateFields`\n\nNo fields were supplied.\n\n---\n\n- `CodebarAg\\DocuWare\\Exceptions\\UnableToGetDocumentCount`\n\nSomething is wrong with the response from getting the document count.\n\n---\n\n- `Illuminate\\Http\\Client\\RequestException`\n\nAll other cases if the response is not successfully.\n\n\n## ✨ Events\n\n\u003e The Following events will be fired:\n\n```php \nuse CodebarAg\\DocuWare\\Events\\DocuWareResponseLog;\n\n// Log each response from the DocuWare REST API.\nDocuWareResponseLog::class =\u003e [\n    //\n],\n```\n\n## 🔧 Configuration file\n\nYou can publish the config file with:\n\n```bash\nphp artisan vendor:publish --provider=\"CodebarAg\\DocuWare\\DocuWareServiceProvider\" --tag=\"docuware-config\"\n```\n\nThis is the contents of the published config file:\n\n```php\n\u003c?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache driver\n    |--------------------------------------------------------------------------\n    | You may like to define a different cache driver than the default Laravel cache driver.\n    | In Laravel 12+, CACHE_STORE is used instead of CACHE_DRIVER.\n    |\n    */\n\n    'cache_driver' =\u003e env('DOCUWARE_CACHE_DRIVER', env('CACHE_STORE', 'file')),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Requests timeout\n    |--------------------------------------------------------------------------\n    | This variable is optional and only used if you want to set the request timeout manually.\n    |\n    */\n\n    'timeout' =\u003e env('DOCUWARE_TIMEOUT', 15),\n\n    /*\n    |--------------------------------------------------------------------------\n    | DocuWare Credentials\n    |--------------------------------------------------------------------------\n    |\n    | Before you can communicate with the DocuWare REST-API it is necessary\n    | to enter your credentials. You should specify a url containing the\n    | scheme and hostname. In addition add your username and password.\n    |\n    */\n\n    'credentials' =\u003e [\n        'url' =\u003e env('DOCUWARE_URL'),\n        'username' =\u003e env('DOCUWARE_USERNAME'),\n        'password' =\u003e env('DOCUWARE_PASSWORD'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Passphrase\n    |--------------------------------------------------------------------------\n    |\n    | In order to create encrypted URLs we need a passphrase. This enables a\n    | secure exchange of DocuWare URLs without anyone being able to modify\n    | your query strings. You can find it in the organization settings.\n    |\n    */\n\n    'passphrase' =\u003e env('DOCUWARE_PASSPHRASE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Configurations\n    |--------------------------------------------------------------------------\n    |\n    */\n    'configurations' =\u003e [\n        'search' =\u003e [\n            'operation' =\u003e 'And',\n\n            /*\n             * Force Refresh\n             * Determine if result list is retrieved from the cache when ForceRefresh is set\n             * to false (default) or always a new one is executed when ForceRefresh is set to true.\n             */\n\n            'force_refresh' =\u003e true,\n            'include_suggestions' =\u003e false,\n            'additional_result_fields' =\u003e [],\n        ],\n        'cache' =\u003e [\n            'driver' =\u003e env('DOCUWARE_CACHE_DRIVER', env('CACHE_STORE', 'file')),\n            'lifetime_in_seconds' =\u003e env('DOCUWARE_CACHE_LIFETIME_IN_SECONDS', 60),\n        ],\n        'request' =\u003e [\n            'timeout_in_seconds' =\u003e env('DOCUWARE_TIMEOUT', 60),\n        ],\n\n        'client_id' =\u003e env('DOCUWARE_CLIENT_ID', 'docuware.platform.net.client'),\n        'scope' =\u003e env('DOCUWARE_SCOPE', 'docuware.platform'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Tests\n    |--------------------------------------------------------------------------\n    |\n    */\n    'tests' =\u003e [\n        'file_cabinet_id' =\u003e env('DOCUWARE_TESTS_FILE_CABINET_ID'),\n        'dialog_id' =\u003e env('DOCUWARE_TESTS_DIALOG_ID'),\n        'basket_id' =\u003e env('DOCUWARE_TESTS_BASKET_ID'),\n    ],\n];\n```\n\n## 🚧 Testing\n\nCopy your own phpunit.xml-file.\n\n```bash\ncp phpunit.xml.dist phpunit.xml\n```\n\nModify environment variables in the phpunit.xml-file:\n\n```xml\n\u003cenv name=\"DOCUWARE_URL\" value=\"https://domain.docuware.cloud\"/\u003e\n\u003cenv name=\"DOCUWARE_USERNAME\" value=\"user@domain.test\"/\u003e\n\u003cenv name=\"DOCUWARE_PASSWORD\" value=\"password\"/\u003e\n\u003cenv name=\"DOCUWARE_PASSPHRASE\" value=\"passphrase\"/\u003e\n\u003cenv name=\"DOCUWARE_TIMEOUT\" value=\"30\"/\u003e\n\u003cenv name=\"DOCUWARE_CACHE_DRIVER\" value=\"file\"/\u003e\n\u003cenv name=\"DOCUWARE_CACHE_LIFETIME_IN_SECONDS\" value=\"0\"/\u003e\n\u003cenv name=\"DOCUWARE_CLIENT_ID\" value=\"docuware.platform.net.client\"/\u003e\n\u003cenv name=\"DOCUWARE_SCOPE\" value=\"docuware.platform\"/\u003e\n\n\u003cenv name=\"DOCUWARE_TESTS_FILE_CABINET_ID\" value=\"\"/\u003e\n\u003cenv name=\"DOCUWARE_TESTS_DIALOG_ID\" value=\"\"/\u003e\n\u003cenv name=\"DOCUWARE_TESTS_BASKET_ID\" value=\"\"/\u003e\n```\n\nRun the tests:\n\n```bash\ncomposer test\n```\n\n## 📝 Changelog\n\nPlease see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.\n\n## ✏️ Contributing\n\nPlease see [CONTRIBUTING](.github/CONTRIBUTING.md) for details.\n\n## 🧑‍💻 Security Vulnerabilities\n\nPlease review [our security policy](.github/SECURITY.md) on how to report security vulnerabilities.\n\n## 🙏 Credits\n\n- [Sebastian Bürgin-Fix](https://github.com/StanBarrows)\n- [All Contributors](../../contributors)\n- [Skeleton Repository from Spatie](https://github.com/spatie/package-skeleton-laravel)\n- [Laravel Package Training from Spatie](https://spatie.be/videos/laravel-package-training)\n\n## 🎭 License\n\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebar-ag%2Flaravel-docuware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodebar-ag%2Flaravel-docuware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodebar-ag%2Flaravel-docuware/lists"}