diff --git a/.gitignore b/.gitignore index 2a6a14c..329956e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ build composer.lock coverage -docs phpunit.xml phpstan.neon testbench.yaml diff --git a/.phpunit.cache/test-results b/.phpunit.cache/test-results index f383ffc..94c1f26 100644 --- a/.phpunit.cache/test-results +++ b/.phpunit.cache/test-results @@ -1 +1 @@ -{"version":"pest_2.34.9","defects":{"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":8},"times":{"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_files_to_a_data_record":0.393,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\ClipTest::__pest_evaluable_it_can_clip_2_documents":6.632,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetDialogsOfASpecificTypeTest::__pest_evaluable_it_can_list_dialogs_for_a_file_cabinet":0.528,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_a_file_to_a_data_record":1.01,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateTimeDTOTest::__pest_evaluable_it_create_index_date_time_dto":0.016,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTextDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":0.001,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfAGroupTest::__pest_evaluable_it_can_list_users_of_a_group":0.877,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetASpecificSectionTest::__pest_evaluable_it_can_get_a_specific_section":0.833,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.198,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetDocumentsFromAFileCabinetTest::__pest_evaluable_it_can_get_all_documents":1.099,"P\\Tests\\Feature\\Requests\\Documents\\ApplicationProperties\\ApplicationPropertiesTest::__pest_evaluable_it_can_add_get_update_delete_application_properties_to_a_document":0.926,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_add_roles_to_a_user":6.612,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_remove_roles_to_a_user":6.217,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_multiple_document_values":0.68,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_a_document_value":0.934,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadSectionTest::__pest_evaluable_it_can_download_a_section":0.746,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\StapleTest::__pest_evaluable_it_can_staple_2_documents":12.563,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnclipTest::__pest_evaluable_it_can_unclip_2_documents":12.891,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_responsible_identity_service":0.547,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_authenticate_with_DocuWare_Credentials":0.474,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_identity_service_configuration":1.719,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetASpecificDocumentFromAFileCabinetTest::__pest_evaluable_it_can_show_a_document":0.725,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetGroupsTest::__pest_evaluable_it_can_list_groups":0.529,"P\\Tests\\Feature\\Requests\\Documents\\Thumbnail\\GetDocumentDownloadThumbnailRequestTest::__pest_evaluable_it_can_download_a_document_thumbnail":0.863,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadDocumentTest::__pest_evaluable_it_can_download_a_document":0.833,"P\\Tests\\Feature\\Requests\\Organization\\GetOrganizationsRequestTest::__pest_evaluable_it_can_list_organizations":0.546,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetAllGroupsForASpecificUserTest::__pest_evaluable_it_can_list_groups_for_a_specific_user":0.685,"P\\Tests\\Feature\\Requests\\Fields\\GetFieldsRequestTest::__pest_evaluable_it_can_list_fields_for_a_file_cabinet":0.52,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUserByIdTest::__pest_evaluable_it_can_get_user_by_id":0.679,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadThumbnailTest::__pest_evaluable_it_can_download_a_thumbnail":0.781,"P\\Tests\\Feature\\SleepTest::__pest_evaluable_sleep":0.404,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersTest::__pest_evaluable_it_can_list_users":0.655,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDecimalDTOTest::__pest_evaluable_it_create_index_numeric_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_with_index_values_and_delete_it":0.962,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_without_file_name_and_file_content_and_delete_it":0.614,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator":0.641,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_null_values":0.697,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator":0.616,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates":0.414,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.574,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future":0.557,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past":0.55,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents":0.569,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_multiple_values":1.213,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_add_groups_to_a_user":7.061,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_remove_groups_to_a_user":5.914,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\DeleteSectionTest::__pest_evaluable_it_can_delete_a_specific_section":0.863,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetASpecificDialogTest::__pest_evaluable_it_can_get_a_dialog":0.578,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryTest::__pest_evaluable_it_can_get_document_workflow_history":5.775,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentPreviewRequestTest::__pest_evaluable_it_can_preview_a_document_image":0.921,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateDTOTest::__pest_evaluable_it_create_index_date_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\DeleteDocumentsFromTrashBinTest::__pest_evaluable_it_can_delete_documents_in_trash":0.882,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareTableDTOTest::__pest_evaluable_it_create_prepare_index_table_dto":0.002,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetAllRolesForASpecificUserTest::__pest_evaluable_it_can_list_groups":0.726,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetAllSectionsFromADocumentTest::__pest_evaluable_it_can_get_all_sections_from_a_document":0.73,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfARoleTest::__pest_evaluable_it_can_list_users_of_a_role":0.574,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\RestoreDocumentsFromTrashBinTest::__pest_evaluable_it_can_restore_documents_in_trash":0.933,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_paginator":0.419,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_dialog":0.471,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_field":0.411,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization":0.401,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_table_row":0.417,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document":0.397,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization_index":0.434,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_suggestion_field":0.425,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_file_cabinet":0.406,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_field":0.411,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareDTOTest::__pest_evaluable_it_create_prepare_makeContent_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareDTOTest::__pest_evaluable_it_create_prepare_index_dto":0.001,"P\\Tests\\Feature\\Requests\\FileCabinets\\General\\GetFileCabinetInformationTest::__pest_evaluable_it_can_get_file_cabinet_information":0.559,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_create_users":1.282,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_update_users":5.917,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexNumericDTOTest::__pest_evaluable_it_create_index_numeric_dto":0.001,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_basket":0.527,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_file_cabinet":0.405,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":0.002,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_with_null_values_in_trash":0.652,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.393,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator_in_trash":0.496,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future_in_trash":0.555,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past_in_trash":0.541,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_in_trash":0.515,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator_in_trash":0.542,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates_in_trash":0.401,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryStepsTest::__pest_evaluable_it_can_get_document_workflow_history":6.945,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnstapleTest::__pest_evaluable_it_can_unstaple_a_document":13.004,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetRolesTest::__pest_evaluable_it_can_list_groups":0.647,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentCountRequestTest::__pest_evaluable_it_can_get_a_total_count_of_documents":0.73,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto_using_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexKeywordDTOTest::__pest_evaluable_it_create_prepare_index_keyword_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexMemoDTOTest::__pest_evaluable_it_create_prepare_index_memo_dto":0.001}} \ No newline at end of file +{"version":"pest_2.34.9","defects":{"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":8},"times":{"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_files_to_a_data_record":0.393,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\ClipTest::__pest_evaluable_it_can_clip_2_documents":6.632,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetDialogsOfASpecificTypeTest::__pest_evaluable_it_can_list_dialogs_for_a_file_cabinet":0.528,"P\\Tests\\Feature\\Requests\\FileCabinets\\Upload\\AppendFilesToADataRecordTest::__pest_evaluable_it_can_attach_a_file_to_a_data_record":1.01,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateTimeDTOTest::__pest_evaluable_it_create_index_date_time_dto":0.016,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTextDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":0.001,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfAGroupTest::__pest_evaluable_it_can_list_users_of_a_group":0.877,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetASpecificSectionTest::__pest_evaluable_it_can_get_a_specific_section":0.833,"P\\Tests\\Core\\ArchTest::__pest_evaluable_it_will_not_use_any_debug_function":0.198,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetDocumentsFromAFileCabinetTest::__pest_evaluable_it_can_get_all_documents":1.099,"P\\Tests\\Feature\\Requests\\Documents\\ApplicationProperties\\ApplicationPropertiesTest::__pest_evaluable_it_can_add_get_update_delete_application_properties_to_a_document":0.926,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_add_roles_to_a_user":6.612,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\AddRemoveUserToARoleTest::__pest_evaluable_it_can_remove_roles_to_a_user":6.217,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_multiple_document_values":0.68,"P\\Tests\\Feature\\Requests\\Documents\\PutDocumentFieldsRequestTest::__pest_evaluable_it_can_update_a_document_value":0.934,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadSectionTest::__pest_evaluable_it_can_download_a_section":0.746,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\StapleTest::__pest_evaluable_it_can_staple_2_documents":12.563,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnclipTest::__pest_evaluable_it_can_unclip_2_documents":12.891,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_responsible_identity_service":0.547,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_authenticate_with_DocuWare_Credentials":0.474,"P\\Tests\\Feature\\DocuWareAuthenticationTest::__pest_evaluable_it_can_get_oath_identity_service_configuration":1.719,"P\\Tests\\Feature\\Requests\\FileCabinets\\Search\\GetASpecificDocumentFromAFileCabinetTest::__pest_evaluable_it_can_show_a_document":0.725,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetGroupsTest::__pest_evaluable_it_can_list_groups":0.529,"P\\Tests\\Feature\\Requests\\Documents\\Thumbnail\\GetDocumentDownloadThumbnailRequestTest::__pest_evaluable_it_can_download_a_document_thumbnail":0.863,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadDocumentTest::__pest_evaluable_it_can_download_a_document":0.833,"P\\Tests\\Feature\\Requests\\Organization\\GetOrganizationsRequestTest::__pest_evaluable_it_can_list_organizations":0.546,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\GetAllGroupsForASpecificUserTest::__pest_evaluable_it_can_list_groups_for_a_specific_user":0.685,"P\\Tests\\Feature\\Requests\\Fields\\GetFieldsRequestTest::__pest_evaluable_it_can_list_fields_for_a_file_cabinet":0.52,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUserByIdTest::__pest_evaluable_it_can_get_user_by_id":0.679,"P\\Tests\\Feature\\Requests\\Documents\\Download\\DownloadThumbnailTest::__pest_evaluable_it_can_download_a_thumbnail":0.781,"P\\Tests\\Feature\\SleepTest::__pest_evaluable_sleep":0.404,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersTest::__pest_evaluable_it_can_list_users":0.655,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDecimalDTOTest::__pest_evaluable_it_create_index_numeric_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_with_index_values_and_delete_it":0.962,"P\\Tests\\Feature\\Requests\\Documents\\PostDocumentRequestTest::__pest_evaluable_it_can_upload_document_without_file_name_and_file_content_and_delete_it":0.614,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator":0.641,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_null_values":0.697,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator":0.616,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates":0.414,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.574,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future":0.557,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past":0.55,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents":0.569,"P\\Tests\\Feature\\Requests\\Search\\GetSearchRequestTest::__pest_evaluable_it_can_search_documents_with_multiple_values":1.213,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_add_groups_to_a_user":7.061,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyGroups\\AddRemoveUserToAGroupTest::__pest_evaluable_it_can_remove_groups_to_a_user":5.914,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\DeleteSectionTest::__pest_evaluable_it_can_delete_a_specific_section":0.863,"P\\Tests\\Feature\\Requests\\FileCabinets\\Dialogs\\GetASpecificDialogTest::__pest_evaluable_it_can_get_a_dialog":0.578,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryTest::__pest_evaluable_it_can_get_document_workflow_history":5.775,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentPreviewRequestTest::__pest_evaluable_it_can_preview_a_document_image":0.921,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexDateDTOTest::__pest_evaluable_it_create_index_date_dto":0,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\DeleteDocumentsFromTrashBinTest::__pest_evaluable_it_can_delete_documents_in_trash":0.882,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareTableDTOTest::__pest_evaluable_it_create_prepare_index_table_dto":0.002,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetAllRolesForASpecificUserTest::__pest_evaluable_it_can_list_groups":0.726,"P\\Tests\\Feature\\Requests\\Documents\\Sections\\GetAllSectionsFromADocumentTest::__pest_evaluable_it_can_get_all_sections_from_a_document":0.73,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetUsers\\GetUsersOfARoleTest::__pest_evaluable_it_can_list_users_of_a_role":0.574,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\RestoreDocumentsFromTrashBinTest::__pest_evaluable_it_can_restore_documents_in_trash":0.933,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_paginator":0.419,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_dialog":0.471,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_field":0.411,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization":0.401,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_table_row":0.417,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document":0.397,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_organization_index":0.434,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_suggestion_field":0.425,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_file_cabinet":0.406,"P\\Tests\\Feature\\DTOTest::__pest_evaluable_it_create_a_fake_document_field":0.411,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareDTOTest::__pest_evaluable_it_create_prepare_makeContent_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\PrepareDTOTest::__pest_evaluable_it_create_prepare_index_dto":0.001,"P\\Tests\\Feature\\Requests\\FileCabinets\\General\\GetFileCabinetInformationTest::__pest_evaluable_it_can_get_file_cabinet_information":0.559,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_create_users":1.282,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\CreateUpdateUsers\\CreateUpdateUserTest::__pest_evaluable_it_can_update_users":5.917,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexNumericDTOTest::__pest_evaluable_it_create_index_numeric_dto":0.001,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_basket":0.658,"P\\Tests\\Feature\\DocuWareTest::__pest_evaluable_it_can_create_encrypted_url_for_a_document_in_a_file_cabinet":0.405,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto":0.002,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_with_null_values_in_trash":0.652,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_diverged_date_range":0.393,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_same_operator_in_trash":0.496,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_future_in_trash":0.555,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_dates_filter_in_past_in_trash":0.541,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_search_documents_in_trash":0.515,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_override_search_documents_dates_filter_by_using_equal_operator_in_trash":0.542,"P\\Tests\\Feature\\Requests\\Documents\\DocumentsTrashBin\\GetDocumentsFromTrashBinTest::__pest_evaluable_it_can_t_search_documents_by_more_than_two_dates_in_trash":0.401,"P\\Tests\\Feature\\Requests\\Workflow\\GetDocumentWorkflowHistoryStepsTest::__pest_evaluable_it_can_get_document_workflow_history":6.945,"P\\Tests\\Feature\\Requests\\Documents\\ClipUnclipStapleUnstaple\\UnstapleTest::__pest_evaluable_it_can_unstaple_a_document":13.004,"P\\Tests\\Feature\\Requests\\General\\UserManagement\\GetModifyRoles\\GetRolesTest::__pest_evaluable_it_can_list_groups":0.647,"P\\Tests\\Feature\\Requests\\Documents\\GetDocumentCountRequestTest::__pest_evaluable_it_can_get_a_total_count_of_documents":0.73,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexTableDTOTest::__pest_evaluable_it_create_prepare_index_text_dto_using_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexKeywordDTOTest::__pest_evaluable_it_create_prepare_index_keyword_dto":0.001,"P\\Tests\\Unit\\DTO\\DocumentIndex\\IndexMemoDTOTest::__pest_evaluable_it_create_prepare_index_memo_dto":0.001}} \ No newline at end of file diff --git a/README.md b/README.md index a9e7578..1b4dd11 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,33 @@ DocuWare REST API. It is used to query the most common endpoints. [DocuWare REST API](https://developer.docuware.com/rest/index.html). See the documentation if you need further functionality. ⚠️ +## Navigation + + * [💡 What is DocuWare?](#-what-is-docuware) + * [🛠 Requirements](#-requirements) + * [⚙️ Installation](#-installation) + * [🏗 Usage](#-usage) + * [Getting Started with OAuth](#getting-started-with-oauth) + * [Getting a new token via Username & Password:](#getting-a-new-token-via-username--password) + * [Getting a new token via Username & Password (Trusted User):](#getting-a-new-token-via-username--password-trusted-user) + * [Available Requests](#available-requests) + * [Extending the connector (EXAMPLE)](#extending-the-connector-example) + * [Create a new connector](#create-a-new-connector) + * [Use the new connector](#use-the-new-connector) + * [🖼 Make encrypted URLs](#-make-encrypted-urls) + * [🏋️ Document Index Fields DTO showcase](#-document-index-fields-dto-showcase) + * [📦 Caching requests](#-caching-requests) + * [💥 Exceptions explained](#-exceptions-explained) + * [✨ Events](#-events) + * [🔧 Configuration file](#-configuration-file) + * [🚧 Testing](#-testing) + * [📝 Changelog](#-changelog) + * [✏️ Contributing](#-contributing) + * [🧑‍💻 Security Vulnerabilities](#-security-vulnerabilities) + * [🙏 Credits](#-credits) + * [🎭 License](#-license) + + ## 💡 What is DocuWare? DocuWare provides cloud document management and workflow automation software @@ -23,41 +50,14 @@ then optimize the processes that power the core of your business.
Version Support -### \> = v11.0 (alpha) - -- PHP: `^8.2`` - - Laravel: `^11.*` - - DocuWare Cloud Access - -### \> = v4.0 (alpha) - -- PHP: `^8.2`` -- Laravel: `^11.*` -- DocuWare Cloud Access - -### \> = v3.0 - -- PHP: `^8.2`` -- Laravel: `^10.*` -- DocuWare Cloud Access - -### \> = v2.0 - -- PHP: `^8.1` |`^8.2` -- Laravel: `^9.*` | `^10.*` -- DocuWare Cloud Access - -### \> = v1.2 - -- PHP: `^8.1` -- Laravel: `^9.*` -- DocuWare Cloud Access - -### \< v1.2 - -- PHP: `^8.0` -- Laravel: `^8.*` -- DocuWare Cloud Access +| Version | PHP Version | Laravel Version | DocuWare Cloud Access | +|-----------------|-------------|-----------------|-----------------------| +| > v11.0 (alpha) | ^8.2 | ^11.* | ✅ | +| > v4.0 | ^8.2 | ^11.* | ✅ | +| > v3.0 | ^8.2 | ^10.* | ✅ | +| > v2.0 | ^8.1 | ^9.* | ✅ | +| > v1.2 | ^8.1 | ^9.* | ✅ | +| < v1.2 | ^8.0 | ^8.* | ✅ |
@@ -180,9 +180,6 @@ DOCUWARE_PASSPHRASE="a#bcd>2~C1'abc\\#" ## 🏗 Usage ### Getting Started with OAuth -
- Getting Started with OAuth - > This package automatically handles the generation of OAuth token for you and stores them in cache. ### Getting a new token via Username & Password: @@ -214,11 +211,41 @@ $connector = new DocuWareConnector( ); ``` -### Extending the connector (EXAMPLE) - -We understand it may be repetitive to pass the configuration every time you create a new connector. +### Available Requests -You can extend the connector and set the configuration once. +- [General](docs/General) + - [Organisation](docs/General/organization.md) + - [User Management](docs/General/User%20Management) + - [Get Users](docs/General/User%20Management/get_users.md) + - [Create/Update Users](docs/General/User%20Management/create-update_users.md) + - [Get/Modify Groups](docs/General/User%20Management/get-modify_groups.md) + - [Get/Modify Roles](docs/General/User%20Management/get-modify_roles.md) +- [File Cabinets](docs/File%20Cabinets) + - [General](docs/File%20Cabinets/general.md) + - [Dialogs](docs/File%20Cabinets/dialogs.md) + - [Search](docs/File%20Cabinets/search.md) + - [Check/In & Check/Out](docs/File%20Cabinets/check-in_check-out.md) + - [Select Lists](docs/File%20Cabinets/select_lists.md) + - [Upload](docs/File%20Cabinets/upload.md) + - [Batch Index Fields Update](docs/File%20Cabinets/batch_index_fields_update.md) +- [Documents](docs/Documents) + - [Update Index Values](docs/Documents/update_index_values.md) + - [Modify Documents](docs/Documents/modify_documents.md) + - [Clip/Unclip & Staple/Unstaple](docs/Documents/clip-unclicp_and_staple-unstaple.md) + - [Annotations & Stamps](docs/Documents/annotations-stamps.md) + - [Documents Trash Bin](docs/Documents/documents-trash-bin.md) + - [Application Properties](docs/Documents/application_properties.md) + - [Sections](docs/Documents/sections.md) + - [Download](docs/Documents/download.md) +- [Workflow](docs/workflow.md) + + + +## Extending the connector (EXAMPLE) + +> We understand it may be repetitive to pass the configuration every time you create a new connector. +> +> You can extend the connector and set the configuration once. #### Create a new connector @@ -246,1140 +273,32 @@ class YourOwnDocuWareConnector extends DocuWareConnector #### Use the new connector ```php -use App\Connectors\CustomDocuWareConnector; +use App\Connectors\YourOwnDocuWareConnector; use CodebarAg\DocuWare\DTO\Config\ConfigWithCredentials; $connector = new YourOwnDocuWareConnector(); ``` +## 🖼 Make encrypted URLs -
- -### Available Requests - -
- Documents - -#### Add Application Properties -```php -use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\AddApplicationProperties; - -$addProperties = $connector->send(new AddApplicationProperties( - $fileCabinetId, - $documentId, - [ - [ - 'Name' => 'Key1', - 'Value' => 'Key1 Value', - ], - [ - 'Name' => 'Key2', - 'Value' => 'Key2 Value', - ], - ], -))->dto(); -``` - -#### Update Application Properties -```php -use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\UpdateApplicationProperties; - -$updateProperties = $connector->send(new UpdateApplicationProperties( - $fileCabinetId, - $documentId, - [ - [ - 'Name' => 'Key1', - 'Value' => 'Key1 Value Updated', - ], - ], -))->dto()->sortBy('Name'); -``` - -#### Delete Application Properties -```php -use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\DeleteApplicationProperties; - -$deleteProperties = $connector->send(new DeleteApplicationProperties( - $fileCabinetId, - $document->id, - [ - 'Key1', - ], -))->dto(); -``` - -#### Get Application Properties -```php -use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\GetApplicationProperties; - -$properties = $connector->send(new GetApplicationProperties( - $fileCabinetId, - $document->id, -))->dto(); -``` - - -#### Clip -```php -use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Clip; - -$clip = $connector->send(new Clip( - $fileCabinetId, - [ - $documentId, - $document2Id, - ] -))->dto(); -``` - -#### Unclip -```php -use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Unclip; - -$unclip = $connector->send(new Unclip( - $fileCabinetId, - $clipId -))->dto(); -``` - -#### Staple -```php -use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Staple; - -$staple = $connector->send(new Staple( - $fileCabinetId, - [ - $documentId, - $document2Id, - ] -))->dto(); -``` - -#### Unstaple -```php -use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Unstaple; - -$unclip = $connector->send(new Unstaple( - $fileCabinetId, - $stapleId -))->dto(); -``` - -#### Delete Documents -```php -use CodebarAg\DocuWare\Requests\Documents\DocumentsTrashBin\DeleteDocuments; - -$delete = $connector->send(new DeleteDocuments([$documentID, $document2ID]))->dto(); -``` - -#### Restore Documents -```php -use CodebarAg\DocuWare\Requests\Documents\DocumentsTrashBin\RestoreDocuments; - -$delete = $connector->send(new RestoreDocuments([$documentID, $document2ID]))->dto(); -``` - -#### Download Document -```php -use CodebarAg\DocuWare\Requests\Documents\Download\DownloadDocument; - -$contents = $connector->send(new DownloadDocument( - $fileCabinetId, - $documentId -))->dto(); -``` - -#### Download Section -```php -use CodebarAg\DocuWare\Requests\Documents\Download\DownloadSection; - -$contents = $connector->send(new DownloadSection( - $fileCabinetId, - $sectionId -))->dto(); -``` - -#### Download Thumbnail -```php -use CodebarAg\DocuWare\Requests\Documents\Download\DownloadThumbnail; - -$contents = $connector->send(new DownloadThumbnail( - $fileCabinetId, - $sectionId -))->dto(); -``` - -#### Delete Section -```php -use CodebarAg\DocuWare\Requests\Documents\Sections\DeleteSection; - -$deleted = $connector->send(new DeleteSection( - $fileCabinetId, - $sectionId -))->dto(); -``` - -#### Get All Section -```php -use CodebarAg\DocuWare\Requests\Documents\Sections\GetAllSectionsFromADocument; - -$sections = $connector->send(new GetAllSectionsFromADocument( - $fileCabinetId, - $documentId -))->dto(); -``` - -#### Get Specific Section -```php -use CodebarAg\DocuWare\Requests\Documents\Sections\GetASpecificSection; - -$section = $connector->send(new GetASpecificSection( - $fileCabinetId, - $sectionsId -))->dto(); -``` - - -#### Get Total Number Of Documents -```php -use CodebarAg\DocuWare\Requests\FileCabinets\General\GetTotalNumberOfDocuments; - -$count = $connector->send(new GetTotalNumberOfDocuments( - $fileCabinetId, - $dialogId -))->dto(); -``` - -#### Get Document Preview -```php -use CodebarAg\DocuWare\Requests\Documents\GetDocumentPreviewRequest; - -$image = $connector->send(new GetDocumentPreviewRequest($fileCabinetId, $documentId))->dto(); -``` - -#### Create Data Record -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Upload\CreateDataRecord; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; - -$document = $connector->send(new CreateDataRecord( - $fileCabinetId, - null, - null, - collect([ - IndexTextDTO::make('DOCUMENT_LABEL', '::data-entry::'), - ]), -))->dto(); -``` - -#### Create Table Data Record -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Upload\CreateDataRecord; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTableDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; - -$tableRows = collect([ - collect([ - IndexTextDTO::make('TEXT', 'project_1'), - IndexNumericDTO::make('INT', 1), - IndexDecimalDTO::make('DECIMAL', 1.1), - IndexDateDTO::make('DATE', $now), - IndexDateTimeDTO::make('DATETIME', $now), - ]), - collect([ - IndexTextDTO::make('TEXT', 'project_2'), - IndexNumericDTO::make('INT', 2), - IndexDecimalDTO::make('DECIMAL', 2.2), - IndexDateDTO::make('DATE', $now), - IndexDateTimeDTO::make('DATETIME', $now), - ]), -]); - - -$document = $connector->send(new CreateDataRecord( - $fileCabinetId, - null, - null, - collect([ - IndexTableDTO::make('TABLE_NAME', $tableRows) - ]), -))->dto(); -``` - -#### Update Index Values -```php -use CodebarAg\DocuWare\Requests\Documents\UpdateIndexValues\UpdateIndexValues; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; - -$response = $connector->send(new UpdateIndexValues( - $fileCabinetId, - $documentId, - collect([ - IndexTextDTO::make('DOCUMENT_LABEL', '::new-data-entry::'), - ]) -))->dto(); -``` - -#### Update Table Data Record -```php -use CodebarAg\DocuWare\Requests\Documents\UpdateIndexValues\UpdateIndexValues; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTableDTO; -use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; - -$tableRows = collect([ - collect([ - IndexTextDTO::make('TEXT', 'project_1'), - IndexNumericDTO::make('INT', 1), - IndexDecimalDTO::make('DECIMAL', 1.1), - IndexDateDTO::make('DATE', $now), - IndexDateTimeDTO::make('DATETIME', $now), - ]), - collect([ - IndexTextDTO::make('TEXT', 'project_2'), - IndexNumericDTO::make('INT', 2), - IndexDecimalDTO::make('DECIMAL', 2.2), - IndexDateDTO::make('DATE', $now), - IndexDateTimeDTO::make('DATETIME', $now), - ]), -]); - - -$document = $connector->send(new UpdateIndexValues( - $fileCabinetId, - null, - null, - collect([ - IndexTableDTO::make('TABLE_NAME', $tableRows) - ]), -))->dto(); -``` -
- - -
- Fields - -#### Get Fields -```php -use CodebarAg\DocuWare\Requests\Fields\GetFieldsRequest; - -$fields = $connector->send(new GetFieldsRequest($fileCabinetId))->dto(); -``` - -
- -
- File Cabinets - -#### Get All Dialogs -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetAllDialogs; - -$dialogs = $connector->send(new GetAllDialogs($fileCabinetId))->dto(); -``` - -#### Get Dialogs of a Specific Type -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetASpecificDialog; - -$dialog = $connector->send(new GetASpecificDialog($fileCabinetId, $dialogId))->dto(); -``` - -#### Get Dialogs Of A Specific Type -```php -use CodebarAg\DocuWare\Enums\DialogType; -use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetDialogsOfASpecificType; - -$dialogs = $connector->send(new GetDialogsOfASpecificType($fileCabinetId, DialogType::SEARCH))->dto(); -``` - -#### Get File Cabinet Information -```php -use CodebarAg\DocuWare\Requests\FileCabinets\General\GetFileCabinetInformation; - -$fileCabinet = $connector->send(new GetFileCabinetInformation($fileCabinetId))->dto(); -``` - -#### Get A Specific Document From A File Cabinet -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Search\GetASpecificDocumentFromAFileCabinet; - -$document = $connector->send(new GetASpecificDocumentFromAFileCabinet($fileCabinetId, $documentId))->dto(); -``` - -#### Get Documents From A File Cabinet -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Search\GetDocumentsFromAFileCabinet; - -$documents = $connector->send(new GetDocumentsFromAFileCabinet( - config('laravel-docuware.tests.file_cabinet_id') -))->dto(); -``` - -#### Append Files To A Data Record -```php -use CodebarAg\DocuWare\Requests\FileCabinets\Upload\AppendFilesToADataRecord; - -$response = $connector->send( - new AppendFilesToADataRecord( - fileCabinetId: $fileCabinetId, - dataRecordId: $document->id, - files: collect([ - new MultipartValue( - name: 'File[]', - value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-2.pdf'), - filename: 'test-2.pdf', - ), - new MultipartValue( - name: 'File[]', - value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-3.pdf'), - filename: 'test-3.pdf', - ), - ]) - ) -)->dto(); -``` -
- -
- General - -#### Create User -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\CreateUpdateUsers\CreateUser; - -$user = $connector->send(new CreateUser(new User( - name: $timestamp.' - Test User', - dbName: $timestamp, - email: $timestamp.'-test@example.test', - password: 'TESTPASSWORD', -)))->dto(); -``` - -#### Update User -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\CreateUpdateUsers\UpdateUser; - -$user->name .= ' - Updated'; -$user->active = false; - -$user = $connector->send(new UpdateUser($user))->dto(); -``` - -#### Add User To A Group -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\AddUserToAGroup; - -$response = $connector->send(new AddUserToAGroup( - userId: $userId, - ids: [$groupId], -))->dto(); -``` - -#### Remove User From A Group -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\RemoveUserFromAGroup; - -$response = $connector->send(new RemoveUserFromAGroup( - userId: $userId, - ids: [$groupId], -))->dto(); -``` - -#### Get All Groups For A Specific User -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\GetAllGroupsForASpecificUser; - -$groups = $connector->send(new GetAllGroupsForASpecificUser($userId))->dto(); -``` - -#### Get Groups -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\GetGroups; - -$groups = $connector->send(new GetGroups())->dto(); -``` - -#### Add User To A Role -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\AddUserToARole; - -$response = $connector->send(new AddUserToARole( - userId: $userId, - ids: [$roleId], -))->dto(); -``` - -#### Remove User From A Role -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\RemoveUserFromARole; - -$response = $connector->send(new RemoveUserFromARole( - userId: $userId, - ids: [$roleId], -))->dto(); -``` - -#### Get All Roles For A Specific User -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\GetAllRolesForASpecificUser; - -$roles = $connector->send(new GetAllRolesForASpecificUser($userId))->dto(); -``` - -#### Get Roles -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\GetRoles; - -$roles = $this->connector->send(new GetRoles())->dto(); -``` - -#### Get User By Id -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUserById; - -$user = $this->connector->send(new GetUserById($userId))->dto(); -``` - -#### Get Users Of A Group -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsersOfAGroup; - -$users = $this->connector->send(new GetUsersOfAGroup($groupId))->dto(); -``` - -#### Get Users Of A Role -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsersOfARole; - -$users = $this->connector->send(new GetUsersOfARole($roleId))->dto(); -``` - -### Get Users -```php -use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsers; - -$users = $this->connector->send(new GetUsers())->dto(); -``` - -
- -
- Organization - -#### Get Organization -```php -use CodebarAg\DocuWare\Requests\General\Organization\GetOrganization; - -$organizations = $this->connector->send(new GetOrganization())->dto(); -``` - -
- -
- Select List - -#### Get Select Lists -```php -use CodebarAg\DocuWare\Requests\FileCabinets\SelectLists\GetSelectLists; - -$types = $this->connector->send(new GetSelectLists( - $fileCabinetId, - $dialogId, - $fieldName, -))->dto(); -``` - -
- -
- Workflow - -#### Get Document Workflow History -```php -use CodebarAg\DocuWare\Requests\Workflow\GetDocumentWorkflowHistory; - -$history = $this->connector->send(new GetDocumentWorkflowHistory( - $fileCabinetId, - $documentId -))->dto(); -``` - -#### Get Document Workflow History Steps -```php -use CodebarAg\DocuWare\Requests\Workflow\GetDocumentWorkflowHistorySteps; - -$historySteps = $this->connector->send(new GetDocumentWorkflowHistorySteps( - $workflowId, - $historyId, -))->dto(); -``` - -
- -## 🔍 Search usage -
- Search Usage - -```php -use CodebarAg\DocuWare\Facades\DocuWare; -use CodebarAg\DocuWare\Connectors\DocuWareConnector; - -$connector = new DocuWareConnector(); -``` - -```php -/** - * Most basic example to search for documents. You only need to provide a valid - * file cabinet id. - */ - -$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf'; - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($fileCabinetId) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Search in multiple file cabinets. Provide an array of file cabinet ids. - */ - -$fileCabinetIds = [ - '0ee72de3-4258-4353-8020-6a3ff6dd650f', - '3f9cb4ff-82f2-44dc-b439-dd648269064f', -]; - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinets($fileCabinetIds) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Find results on the next page. - * - * Default: 1 - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->page(2) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Define the number of results which should be shown per page. - * - * Default: 50 - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->perPage(30) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Use the full-text search. You have to activate full-text search in your file - * cabinet before you can use this feature. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->fulltext('My secret document') - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Search documents which are created from the first of march. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->filterDate('DWSTOREDATETIME', '>=', Carbon::create(2021, 3, 1)) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Search documents which are created until the first of april. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->filterDate('DWSTOREDATETIME', '<', Carbon::create(2021, 4, 1)) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Order the results by field name. Supported values: 'asc', 'desc' - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->orderBy('DWSTOREDATETIME', 'desc') - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Search documents filtered to the value. You can specify multiple filters. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->filter('TYPE', 'Order') - ->filter('OTHER_FIELD', 'other') - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * Search documents filtered to multiple values. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->filterIn('TYPE', ['Order', 'Invoice']) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * You can specify the dialog which should be used. - */ - -$dialogId = 'bb42c30a-89fc-4b81-9091-d7e326caba62'; - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->dialog($dialogId) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` - -```php -/** - * You can also combine everything. - */ - -$paginatorRequest = DocuWare::searchRequestBuilder() - ->fileCabinet($id) - ->page(2) - ->perPage(30) - ->fulltext('My secret document') - ->filterDate('DWSTOREDATETIME', '>=', Carbon::create(2021, 3, 1)) - ->filterDate('DWSTOREDATETIME','<',Carbon::create(2021, 4, 1)) - ->filter('TYPE', 'Order') - ->filter('OTHER_FIELD', 'other') - ->orderBy('DWSTOREDATETIME', 'desc') - ->dialog($dialogId) - ->get(); - -$paginator = $connector->send($paginatorRequest)->dto(); -``` -
- -## 🔍 Search usage TrashBin -
- Search Usage - -> 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. - -```php -use CodebarAg\DocuWare\DocuWare; - -$paginatorRequest = (new DocuWare()) - ->searchRequestBuilder() - ->trashBin() -``` - -## 🖼 Make encrypted URL - -
- Make encrypted URL - -```php -use CodebarAg\DocuWare\Facades\DocuWare; -``` - -```php -/** - * Make encrypted URL for a document in a file cabinet. - */ - -$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf'; -$documentId = 42; - -$url = DocuWare::url() - ->fileCabinet($fileCabinetId) - ->document($documentId) - ->make(); -``` - -```php -/** - * Make encrypted URL for a document in a basket. - */ - -$basketId = 'b_87356f8d-e50c-450b-909c-4eaccd318fbf'; - -$url = DocuWare::url() - ->basket($basketId) - ->document($documentId) - ->make(); -``` - -```php -/** - * Make encrypted URL valid for a specific amount of time. In the example below - * the URL is valid for one week. Afterwards the URL is no longer working. - */ - -$url = DocuWare::url() - ->fileCabinet($fileCabinetId) - ->document($documentId) - ->validUntil(now()->addWeek()) - ->make(); -``` - -
+- [Encrypted URLs](docs/encrypted_urls.md) ## 🏋️ Document Index Fields DTO showcase -
- Document Index Fields DTO showcase - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO { - +name: "FIELD_TEXT" // string - +value: "Value" // null|string -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO { - +name: "FIELD_NUMERIC" // string - +value: 1 // null|int -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO { - +name: "FIELD_DECIMAL" // string - +value: 1.00 // null|int|float -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO { - +name: "FIELD_DATE" // string - +value: now(), // null|Carbon -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO { - +name: "FIELD_DATETIME" // string - +value: now(), // null|Carbon -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexKeywordDTO { - +name: "FIELD_KEYWORD" // string - +value: "Value" // null|string -} -``` - -```php -CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexMemoDTO { - +name: "FIELD_MEMO" // string - +value: "Value" // null|string -} -``` - -
- -## 🏋️ DTO Showcase -
- DTO Showcase - -```php -CodebarAg\DocuWare\DTO\OrganizationIndex { - +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string - +name: "Fake File Cabinet" // string - +guid: "1334c006-f095-4ae7-892b-fe59282c8bed" // string|null -} -``` - -```php -CodebarAg\DocuWare\DTO\Organization { - +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string - +name: "Fake File Cabinet" // string - +guid: "1334c006-f095-4ae7-892b-fe59282c8bed" // string|null - +additionalInfo: [] // array - +configurationRights: [] // array -} -``` - -```php -CodebarAg\DocuWare\DTO\FileCabinet { - +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string - +name: "Fake File Cabinet" // string - +color: "Yellow" // string - +isBasket: true // bool - +assignedCabinet: "889c13cc-c636-4759-a704-1e6500d2d70f" // string -} -``` - -```php -CodebarAg\DocuWare\DTO\Dialog { - +id: "fae3b667-53e9-48dd-9004-34647a26112e" // string - +type: "ResultList" // string - +label: "Fake Dialog" // string - +isDefault: true // boolean - +fileCabinetId: "1334c006-f095-4ae7-892b-fe59282c8bed" // string -} -``` - -```php -CodebarAg\DocuWare\DTO\Field { - +name: "FAKE_FIELD" // string - +label: "Fake Field" // string - +type: "Memo" // string - +scope: "User" // string -``` - -```php -CodebarAg\DocuWare\DTO\Field { - +name: "FAKE_FIELD" // string - +label: "Fake Field" // string - +type: "Memo" // string - +scope: "User" // string -``` - -```php -CodebarAg\DocuWare\DTO\Document { - +id: 659732 // integer - +file_size: 765336 // integer - +total_pages: 100 // integer - +title: "Fake Title" // string - +extension: ".pdf" // string - +content_type: "application/pdf" // string - +file_cabinet_id: "a233b03d-dc63-42dd-b774-25b3ff77548f" // string - +created_at: Illuminate\Support\Carbon // Carbon - +updated_at: Illuminate\Support\Carbon // Carbon - +fields: Illuminate\Support\Collection { // Collection|DocumentField[] - #items: array:2 [ - 0 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField - 1 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField - ] - } -} -``` - -```php -CodebarAg\DocuWare\DTO\Section {#23784▶ - +id: "5589-5525" - +contentType: "text/plain" - +haveMorePages: true - +pageCount: 1 - +fileSize: 32 - +originalFileName: "example.txt" - +contentModified: "/Date(1702395557000)/" - +annotationsPreview: false - +hasTextAnnotations: null -} -``` - -```php -CodebarAg\DocuWare\DTO\DocumentThumbnail { - +mime: "image/png" // string - +data: "somedata" // string - +base64: "data:image/png;base64,WXpJNWRGcFhVbWhrUjBVOQ==" // string -} -``` - -```php -CodebarAg\DocuWare\DTO\TableRow { - +fields: Illuminate\Support\Collection { // Collection|DocumentField[] - #items: array:2 [ - 0 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField - 1 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField - ] -} -``` - -```php -CodebarAg\DocuWare\DTO\DocumentPaginator - +total: 39 // integer - +per_page: 10 // integer - +current_page: 9 // integer - +last_page: 15 // integer - +from: 1 // integer - +to: 10 // integer - +documents: Illuminate\Support\Collection { // Collection|Document[] - #items: array:2 [ - 0 => CodebarAg\DocuWare\DTO\Document // Document - 1 => CodebarAg\DocuWare\DTO\Document // Document - ] - } - +error: CodebarAg\DocuWare\DTO\ErrorBag { // ErrorBag|null - +code: 422 // int - +message: "'000' is not valid cabinet id" // string - } -} -``` - -
- +- [Document Index Fields DTO](docs/dto.md) ## 📦 Caching requests -
- Caching requests - -All Get Requests are cachable and will be cached by default. - -To determine if the response is cached you can use the following method: - -```php -$connector = new DocuWareConnector(); - -$response = $connector->send(new GetDocumentRequest($fileCabinetId, $documentId)); -$response->isCached(); // false - -// Next time the request is sent - -$response = $connector->send(new GetDocumentRequest($fileCabinetId, $documentId)); -$response->isCached(); // true -``` - -To invalidate the cache for a specific request you can use the following method: - -```php -$connector = new DocuWareConnector(); - -$request = new GetDocumentRequest($fileCabinetId, $documentId); -$request->invalidateCache(); - -$response = $connector->send($request); -``` - -To temporarily disable caching for a specific request you can use the following method: - -```php -$connector = new DocuWareConnector(); - -$request = new GetDocumentRequest($fileCabinetId, $documentId); -$request->disableCaching(); - -$response = $connector->send($request); -``` - -
+- [Caching Requests](docs/caching.md) ## 💥 Exceptions explained -
- Exceptions explained - -- `CodebarAg\DocuWare\Exceptions\UnableToMakeRequest` - -This is thrown if you are not authorized to make the request. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToProcessRequest` - -This is thrown if you passed wrong attributes. For example a file cabinet ID -which does not exist. - ---- +- [Exceptions](docs/exceptions.md) -- `CodebarAg\DocuWare\Exceptions\UnableToLogin` - -This exception can only be thrown during the login if the credentials did not -match. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToLoginNoCookies` - -This exception can only be thrown during the login if there was no cookies in -the response from the api. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToFindPassphrase` - -This exception can only be thrown during the url making if the passphrase -could not be found. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToMakeUrl` - -Something is wrong during the URL making. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToUpdateFields` - -No fields were supplied. - ---- - -- `CodebarAg\DocuWare\Exceptions\UnableToGetDocumentCount` - -Something is wrong with the response from getting the document count. - ---- - -- `Illuminate\Http\Client\RequestException` - -All other cases if the response is not successfully. ## ✨ Events -Following events will be fired: +> The Following events will be fired: ```php use CodebarAg\DocuWare\Events\DocuWareResponseLog; @@ -1390,8 +309,6 @@ DocuWareResponseLog::class => [ ], ``` -
- ## 🔧 Configuration file You can publish the config file with: @@ -1482,30 +399,6 @@ return [ 'lifetime_in_seconds' => env('DOCUWARE_CACHE_LIFETIME_IN_SECONDS', 60), ], ], - - /* - |-------------------------------------------------------------------------- - | Tests - |-------------------------------------------------------------------------- - | - */ - 'tests' => [ - 'file_cabinet_id' => env('DOCUWARE_TESTS_FILE_CABINET_ID'), - 'dialog_id' => env('DOCUWARE_TESTS_DIALOG_ID'), - 'basket_id' => env('DOCUWARE_TESTS_BASKET_ID'), - 'section' => (int) env('DOCUWARE_TESTS_SECTION'), - 'organization_id' => env('DOCUWARE_TESTS_ORGANIZATION_ID'), - 'document_id' => (int) env('DOCUWARE_TESTS_DOCUMENT_ID'), - 'document_file_size_preview' => (int) env('DOCUWARE_TESTS_DOCUMENT_FILE_SIZE_PREVIEW'), - 'document_file_size' => (int) env('DOCUWARE_TESTS_DOCUMENT_FILE_SIZE'), - 'document_count' => (int) env('DOCUWARE_TESTS_DOCUMENT_COUNT'), - 'document_thumbnail_mime_type' => env('DOCUWARE_TESTS_DOCUMENT_THUMBNAIL_MIME_TYPE'), - 'document_thumbnail_file_size' => (int) env('DOCUWARE_TESTS_DOCUMENT_THUMBNAIL_FILE_SIZE'), - 'document_ids' => json_decode(env('DOCUWARE_TESTS_DOCUMENTS_IDS', '[]')), - 'documents_file_size' => (int) env('DOCUWARE_TESTS_DOCUMENTS_FILE_SIZE'), - 'field_name' => env('DOCUWARE_TESTS_FIELD_NAME'), - 'field_name_2' => env('DOCUWARE_TESTS_FIELD_NAME_2'), - ], ]; ``` diff --git a/docs/Documents/annotations-stamps.md b/docs/Documents/annotations-stamps.md new file mode 100644 index 0000000..c4c6541 --- /dev/null +++ b/docs/Documents/annotations-stamps.md @@ -0,0 +1,14 @@ +# Annotations/Stamps +| Request | Supported | +|----------------------------|-----------| +| AddStampWithPosition | 🕣 | +| AddStampWithBestPosition | 🕣 | +| AddTextAnnotation | 🕣 | +| AddRectEntryAnnotation | 🕣 | +| AddLineEntryAnnotation | 🕣 | +| AddPolyLineEntryAnnotation | ❌ | +| DeleteAnnotation | ❌ | +| UpdateTextAnnotation | 🕣 | +| Get Stamps | ❌ | + +> Not Currently Supported diff --git a/docs/Documents/application_properties.md b/docs/Documents/application_properties.md new file mode 100644 index 0000000..4e3932b --- /dev/null +++ b/docs/Documents/application_properties.md @@ -0,0 +1,67 @@ +# Application Properties +| Request | Supported | +|-------------------------------|-----------| +| Get Application Properties | ✅ | +| Add Application Properties | ✅ | +| Delete Application Properties | ✅ | +| Update Application Properties | ✅ | + + +### Add Application Properties +```php +use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\AddApplicationProperties; + +$addProperties = $connector->send(new AddApplicationProperties( + $fileCabinetId, + $documentId, + [ + [ + 'Name' => 'Key1', + 'Value' => 'Key1 Value', + ], + [ + 'Name' => 'Key2', + 'Value' => 'Key2 Value', + ], + ], +))->dto(); +``` + +### Update Application Properties +```php +use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\UpdateApplicationProperties; + +$updateProperties = $connector->send(new UpdateApplicationProperties( + $fileCabinetId, + $documentId, + [ + [ + 'Name' => 'Key1', + 'Value' => 'Key1 Value Updated', + ], + ], +))->dto()->sortBy('Name'); +``` + +### Delete Application Properties +```php +use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\DeleteApplicationProperties; + +$deleteProperties = $connector->send(new DeleteApplicationProperties( + $fileCabinetId, + $document->id, + [ + 'Key1', + ], +))->dto(); +``` + +### Get Application Properties +```php +use CodebarAg\DocuWare\Requests\Documents\ApplicationProperties\GetApplicationProperties; + +$properties = $connector->send(new GetApplicationProperties( + $fileCabinetId, + $document->id, +))->dto(); +``` diff --git a/docs/Documents/clip-unclicp_and_staple-unstaple.md b/docs/Documents/clip-unclicp_and_staple-unstaple.md new file mode 100644 index 0000000..35f6c72 --- /dev/null +++ b/docs/Documents/clip-unclicp_and_staple-unstaple.md @@ -0,0 +1,53 @@ +# Clip/Unclip & Staple/Unstaple +| Request | Supported | +|----------|-----------| +| Clip | ✅ | +| Unclip | ✅ | +| Staple | ✅ | +| Unstaple | ✅ | + +### Clip +```php +use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Clip; + +$clip = $connector->send(new Clip( + $fileCabinetId, + [ + $documentId, + $document2Id, + ] +))->dto(); +``` + +### Unclip +```php +use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Unclip; + +$unclip = $connector->send(new Unclip( + $fileCabinetId, + $clipId +))->dto(); +``` + +### Staple +```php +use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Staple; + +$staple = $connector->send(new Staple( + $fileCabinetId, + [ + $documentId, + $document2Id, + ] +))->dto(); +``` + +### Unstaple +```php +use CodebarAg\DocuWare\Requests\Documents\ClipUnclipStapleUnstaple\Unstaple; + +$unclip = $connector->send(new Unstaple( + $fileCabinetId, + $stapleId +))->dto(); +``` diff --git a/docs/Documents/documents-trash-bin.md b/docs/Documents/documents-trash-bin.md new file mode 100644 index 0000000..6da7ded --- /dev/null +++ b/docs/Documents/documents-trash-bin.md @@ -0,0 +1,34 @@ +# Documents Trash Bin +| Request | Supported | +|-------------------|-----------| +| Get Documents | ✅ | +| Delete Documents | ✅ | +| Restore Documents | ✅ | + + +### Get Documents +> 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. +```php + + +```php +use CodebarAg\DocuWare\DocuWare; + +$paginatorRequest = (new DocuWare()) + ->searchRequestBuilder() + ->trashBin() +``` + +#### Delete Documents +```php +use CodebarAg\DocuWare\Requests\Documents\DocumentsTrashBin\DeleteDocuments; + +$delete = $connector->send(new DeleteDocuments([$documentID, $document2ID]))->dto(); +``` + +#### Restore Documents +```php +use CodebarAg\DocuWare\Requests\Documents\DocumentsTrashBin\RestoreDocuments; + +$delete = $connector->send(new RestoreDocuments([$documentID, $document2ID]))->dto(); +``` diff --git a/docs/Documents/download.md b/docs/Documents/download.md new file mode 100644 index 0000000..0aa8d5a --- /dev/null +++ b/docs/Documents/download.md @@ -0,0 +1,37 @@ +# Download +| Request | Supported | +|--------------------|-----------| +| Download Document | ✅ | +| Download Section | ✅ | +| Download Thumbnail | ✅ | + + +### Download Document +```php +use CodebarAg\DocuWare\Requests\Documents\Download\DownloadDocument; + +$contents = $connector->send(new DownloadDocument( + $fileCabinetId, + $documentId +))->dto(); +``` + +### Download Section +```php +use CodebarAg\DocuWare\Requests\Documents\Download\DownloadSection; + +$contents = $connector->send(new DownloadSection( + $fileCabinetId, + $sectionId +))->dto(); +``` + +### Download Thumbnail +```php +use CodebarAg\DocuWare\Requests\Documents\Download\DownloadThumbnail; + +$contents = $connector->send(new DownloadThumbnail( + $fileCabinetId, + $sectionId +))->dto(); +``` diff --git a/docs/Documents/modify_documents.md b/docs/Documents/modify_documents.md new file mode 100644 index 0000000..9a97c8e --- /dev/null +++ b/docs/Documents/modify_documents.md @@ -0,0 +1,29 @@ +# Modify Documents +| Request | Supported | +|-------------------|-----------| +| Transfer Document | ✅ | +| Delete Document | ✅ | + + +### Transfer Document +```php +use CodebarAg\DocuWare\Requests\Documents\ModifyDocuments\TransferDocument; + +$response = $connector->send(new TransferDocument( + $fileCabinetId, + $destinationFileCabinetId, + $storeDialogId, + $documentId, + $fields, +))->dto(); +``` + +### Delete Documents +```php +use CodebarAg\DocuWare\Requests\Documents\ModifyDocuments\DeleteDocument; + +$connector->send(new DeleteDocument( + $fileCabinetId + $documentId, +))->dto(); +``` diff --git a/docs/Documents/sections.md b/docs/Documents/sections.md new file mode 100644 index 0000000..52ca679 --- /dev/null +++ b/docs/Documents/sections.md @@ -0,0 +1,37 @@ +# Sections +| Request | Supported | +|----------------------------------|-----------| +| Get All Sections from a Document | ✅ | +| Get a Specific Section | ✅ | +| Delete Section | ✅ | + + +### Get All Sections +```php +use CodebarAg\DocuWare\Requests\Documents\Sections\GetAllSectionsFromADocument; + +$sections = $connector->send(new GetAllSectionsFromADocument( + $fileCabinetId, + $documentId +))->dto(); +``` + +### Get Specific Section +```php +use CodebarAg\DocuWare\Requests\Documents\Sections\GetASpecificSection; + +$section = $connector->send(new GetASpecificSection( + $fileCabinetId, + $sectionsId +))->dto(); +``` + +### Delete Section +```php +use CodebarAg\DocuWare\Requests\Documents\Sections\DeleteSection; + +$deleted = $connector->send(new DeleteSection( + $fileCabinetId, + $sectionId +))->dto(); +``` diff --git a/docs/Documents/update_index_values.md b/docs/Documents/update_index_values.md new file mode 100644 index 0000000..1e4b2e0 --- /dev/null +++ b/docs/Documents/update_index_values.md @@ -0,0 +1,59 @@ +# Update Index Values +| Request | Supported | +|---------------------------|-----------| +| Update Index Values | ✅ | +| Update Table Index Values | ✅ | +| Update Table Field Values | ❌ | + + +### Update Index Values +```php +use CodebarAg\DocuWare\Requests\Documents\UpdateIndexValues\UpdateIndexValues; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; + +$response = $connector->send(new UpdateIndexValues( + $fileCabinetId, + $documentId, + collect([ + IndexTextDTO::make('DOCUMENT_LABEL', '::new-data-entry::'), + ]) +))->dto(); +``` + +### Update Table Data Record +```php +use CodebarAg\DocuWare\Requests\Documents\UpdateIndexValues\UpdateIndexValues; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTableDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; + +$tableRows = collect([ + collect([ + IndexTextDTO::make('TEXT', 'project_1'), + IndexNumericDTO::make('INT', 1), + IndexDecimalDTO::make('DECIMAL', 1.1), + IndexDateDTO::make('DATE', $now), + IndexDateTimeDTO::make('DATETIME', $now), + ]), + collect([ + IndexTextDTO::make('TEXT', 'project_2'), + IndexNumericDTO::make('INT', 2), + IndexDecimalDTO::make('DECIMAL', 2.2), + IndexDateDTO::make('DATE', $now), + IndexDateTimeDTO::make('DATETIME', $now), + ]), +]); + + +$document = $connector->send(new UpdateIndexValues( + $fileCabinetId, + null, + null, + collect([ + IndexTableDTO::make('TABLE_NAME', $tableRows) + ]), +))->dto(); +``` diff --git a/docs/File Cabinets/batch_index_fields_update.md b/docs/File Cabinets/batch_index_fields_update.md new file mode 100644 index 0000000..3bad9bb --- /dev/null +++ b/docs/File Cabinets/batch_index_fields_update.md @@ -0,0 +1,15 @@ +# General +| Request | Supported | +|------------------------------------------|-----------| +| Batch Update Index Fields By Id | ❌ | +| Batch Update Index Fields By Search | ❌ | +| Batch Append/Update Keyword Fields By Id | ❌ | + +> Not Currently Supported + +#### Get Fields +```php +use CodebarAg\DocuWare\Requests\Fields\GetFieldsRequest; + +$fields = $connector->send(new GetFieldsRequest($fileCabinetId))->dto(); +``` diff --git a/docs/File Cabinets/check-in_check-out.md b/docs/File Cabinets/check-in_check-out.md new file mode 100644 index 0000000..0ecfcf5 --- /dev/null +++ b/docs/File Cabinets/check-in_check-out.md @@ -0,0 +1,8 @@ +# General +| Request | Supported | +|-------------------------------------------------------------|-----------| +| Check-out & Download a Document | 🕣 | +| Check-in a Document from the File System | 🕣 | +| Undo Check-out | 🕣 | + +> Not Currently Supported diff --git a/docs/File Cabinets/dialogs.md b/docs/File Cabinets/dialogs.md new file mode 100644 index 0000000..e187242 --- /dev/null +++ b/docs/File Cabinets/dialogs.md @@ -0,0 +1,30 @@ +# Dialogs + +| Request | Supported | +|--------------------------------|-----------| +| Get All Dialogs | ✅ | +| Get a Specific Dialog | ✅ | +| Get Dialogs of a Specific Type | ✅ | + +### Get All Dialogs +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetAllDialogs; + +$dialogs = $connector->send(new GetAllDialogs($fileCabinetId))->dto(); +``` + +### Get Dialogs of a Specific Type +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetASpecificDialog; + +$dialog = $connector->send(new GetASpecificDialog($fileCabinetId, $dialogId))->dto(); +``` + +### Get Dialogs Of A Specific Type +```php +use CodebarAg\DocuWare\Enums\DialogType; +use CodebarAg\DocuWare\Requests\FileCabinets\Dialogs\GetDialogsOfASpecificType; + +$dialogs = $connector->send(new GetDialogsOfASpecificType($fileCabinetId, DialogType::SEARCH))->dto(); +``` + diff --git a/docs/File Cabinets/general.md b/docs/File Cabinets/general.md new file mode 100644 index 0000000..0e0dd07 --- /dev/null +++ b/docs/File Cabinets/general.md @@ -0,0 +1,23 @@ +# General + +| Request | Supported | +|-------------------------------|-----------| +| Get File Cabinet Information | ✅ | +| Get Total Number of Documents | ✅ | + +### Get File Cabinet Information +```php +use CodebarAg\DocuWare\Requests\FileCabinets\General\GetFileCabinetInformation; + +$fileCabinet = $connector->send(new GetFileCabinetInformation($fileCabinetId))->dto(); +``` + +### Get Total Number Of Documents +```php +use CodebarAg\DocuWare\Requests\FileCabinets\General\GetTotalNumberOfDocuments; + +$count = $connector->send(new GetTotalNumberOfDocuments( + $fileCabinetId, + $dialogId +))->dto(); +``` diff --git a/docs/File Cabinets/search.md b/docs/File Cabinets/search.md new file mode 100644 index 0000000..8f4e8e0 --- /dev/null +++ b/docs/File Cabinets/search.md @@ -0,0 +1,170 @@ +# Search + +| Description | Implemented | +|------------------------------------------------|-------------| +| Get Documents from a File Cabinet | ✅ | +| Get a Specific Document From a File Cabinet | ✅ | +| Search for Documents in a Single File Cabinet | ✅ | +| Search for Documents in Multiple File Cabinets | ✅ | + +#### Get A Specific Document From A File Cabinet +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Search\GetASpecificDocumentFromAFileCabinet; + +$document = $connector->send(new GetASpecificDocumentFromAFileCabinet( + $fileCabinetId, + $documentId +))->dto(); +``` + +#### Get Documents From A File Cabinet +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Search\GetDocumentsFromAFileCabinet; + +$documents = $connector->send(new GetDocumentsFromAFileCabinet( + $fileCabinetId +))->dto(); +``` + +### Most basic example to search for documents. +> You only need to provide a valid file cabinet id. +```php +$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf'; + +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($fileCabinetId) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Search in multiple file cabinets +> Provide an array of file cabinet ids. +```php +$fileCabinetIds = [ + '0ee72de3-4258-4353-8020-6a3ff6dd650f', + '3f9cb4ff-82f2-44dc-b439-dd648269064f', +]; + +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinets($fileCabinetIds) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Find results on the next page +> Default: 1 +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->page(2) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Define the number of results which should be shown per page +> Default: 50 +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->perPage(30) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Use the full-text search +> You have to activate full-text search in your file cabinet before you can use this feature. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->fulltext('My secret document') + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Search documents which are created from the first of march. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->filterDate('DWSTOREDATETIME', '>=', Carbon::create(2021, 3, 1)) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Search documents which are created until the first of april. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->filterDate('DWSTOREDATETIME', '<', Carbon::create(2021, 4, 1)) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Order the results by field name. +> Supported values: 'asc', 'desc' +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->orderBy('DWSTOREDATETIME', 'desc') + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Search documents filtered to the value. +> You can specify multiple filters. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->filter('TYPE', 'Order') + ->filter('OTHER_FIELD', 'other') + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### Search documents filtered to multiple values. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->filterIn('TYPE', ['Order', 'Invoice']) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### You can specify the dialog which should be used. +```php +$dialogId = 'bb42c30a-89fc-4b81-9091-d7e326caba62'; + +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->dialog($dialogId) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` + +### You can also combine everything. +```php +$paginatorRequest = DocuWare::searchRequestBuilder() + ->fileCabinet($id) + ->page(2) + ->perPage(30) + ->fulltext('My secret document') + ->filterDate('DWSTOREDATETIME', '>=', Carbon::create(2021, 3, 1)) + ->filterDate('DWSTOREDATETIME','<',Carbon::create(2021, 4, 1)) + ->filter('TYPE', 'Order') + ->filter('OTHER_FIELD', 'other') + ->orderBy('DWSTOREDATETIME', 'desc') + ->dialog($dialogId) + ->get(); + +$paginator = $connector->send($paginatorRequest)->dto(); +``` diff --git a/docs/File Cabinets/select_lists.md b/docs/File Cabinets/select_lists.md new file mode 100644 index 0000000..7be7749 --- /dev/null +++ b/docs/File Cabinets/select_lists.md @@ -0,0 +1,15 @@ +# General +| Request | Supported | +|----------------------------------------------|-----------| +| Get Select Lists & Get Filtered Select Lists | ✅ | + +### Get Select Lists +```php +use CodebarAg\DocuWare\Requests\FileCabinets\SelectLists\GetSelectLists; + +$types = $this->connector->send(new GetSelectLists( + $fileCabinetId, + $dialogId, + $fieldName, +))->dto(); +``` diff --git a/docs/File Cabinets/upload.md b/docs/File Cabinets/upload.md new file mode 100644 index 0000000..29c9e57 --- /dev/null +++ b/docs/File Cabinets/upload.md @@ -0,0 +1,89 @@ +# General +| Request | Supported | +|-----------------------------------------------------|-----------| +| Create Data Record | ✅ | +| Append File(s) to a Data Record | ✅ | +| Upload a Single File for a Data Record | ❌ | +| Create a Data Record & Upload File | ❌ | +| Create Data Record & Upload File Using Store Dialog | ❌ | +| Append a Single PDF to a Document | ❌ | +| Replace a PDF Document Section | ❌ | + +### Create Data Record + +#### Create Data Record +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Upload\CreateDataRecord; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; + +$document = $connector->send(new CreateDataRecord( + $fileCabinetId, + null, + null, + collect([ + IndexTextDTO::make('DOCUMENT_LABEL', '::data-entry::'), + ]), +))->dto(); +``` + +#### Create Table Data Record +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Upload\CreateDataRecord; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTableDTO; +use CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO; + +$tableRows = collect([ + collect([ + IndexTextDTO::make('TEXT', 'project_1'), + IndexNumericDTO::make('INT', 1), + IndexDecimalDTO::make('DECIMAL', 1.1), + IndexDateDTO::make('DATE', $now), + IndexDateTimeDTO::make('DATETIME', $now), + ]), + collect([ + IndexTextDTO::make('TEXT', 'project_2'), + IndexNumericDTO::make('INT', 2), + IndexDecimalDTO::make('DECIMAL', 2.2), + IndexDateDTO::make('DATE', $now), + IndexDateTimeDTO::make('DATETIME', $now), + ]), +]); + + +$document = $connector->send(new CreateDataRecord( + $fileCabinetId, + null, + null, + collect([ + IndexTableDTO::make('TABLE_NAME', $tableRows) + ]), +))->dto(); +``` + +#### Append File(s) To A Data Record +```php +use CodebarAg\DocuWare\Requests\FileCabinets\Upload\AppendFilesToADataRecord; + +$response = $connector->send( + new AppendFilesToADataRecord( + fileCabinetId: $fileCabinetId, + dataRecordId: $document->id, + files: collect([ + new MultipartValue( + name: 'File[]', + value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-2.pdf'), + filename: 'test-2.pdf', + ), + new MultipartValue( + name: 'File[]', + value: file_get_contents(__DIR__.'/../../../../Fixtures/files/test-3.pdf'), + filename: 'test-3.pdf', + ), + ]) + ) +)->dto(); +``` diff --git a/docs/General/User Management/create-update_users.md b/docs/General/User Management/create-update_users.md new file mode 100644 index 0000000..082ca02 --- /dev/null +++ b/docs/General/User Management/create-update_users.md @@ -0,0 +1,28 @@ +# Create/Update Users + +| Request | Supported | +|-------------|-----------| +| Create User | ✅ | +| Update User | ✅ | + +### Create User +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\CreateUpdateUsers\CreateUser; + +$user = $connector->send(new CreateUser(new User( + name: $timestamp.' - Test User', + dbName: $timestamp, + email: $timestamp.'-test@example.test', + password: 'TESTPASSWORD', +)))->dto(); +``` + +### Update User +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\CreateUpdateUsers\UpdateUser; + +$user->name .= ' - Updated'; +$user->active = false; + +$user = $connector->send(new UpdateUser($user))->dto(); +``` diff --git a/docs/General/User Management/get-modify_groups.md b/docs/General/User Management/get-modify_groups.md new file mode 100644 index 0000000..6d1f108 --- /dev/null +++ b/docs/General/User Management/get-modify_groups.md @@ -0,0 +1,42 @@ +# Get/Modify Groups + +| Request | Supported | +|------------------------------------|-----------| +| Get Groups | ✅ | +| Get All Groups for a Specific User | ✅ | +| Add User to a Group | ✅ | +| Remove User from a Group | ✅ | + +### Get Groups +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\GetGroups; + +$groups = $connector->send(new GetGroups())->dto(); +``` + +### Get All Groups For A Specific User +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\GetAllGroupsForASpecificUser; + +$groups = $connector->send(new GetAllGroupsForASpecificUser($userId))->dto(); +``` + +### Add User To A Group +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\AddUserToAGroup; + +$response = $connector->send(new AddUserToAGroup( + userId: $userId, + ids: [$groupId], +))->dto(); +``` + +### Remove User From A Group +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyGroups\RemoveUserFromAGroup; + +$response = $connector->send(new RemoveUserFromAGroup( + userId: $userId, + ids: [$groupId], +))->dto(); +``` diff --git a/docs/General/User Management/get-modify_roles.md b/docs/General/User Management/get-modify_roles.md new file mode 100644 index 0000000..6802caf --- /dev/null +++ b/docs/General/User Management/get-modify_roles.md @@ -0,0 +1,42 @@ +# Get/Modify Roles + +| Request | Supported | +|-----------------------------------|-----------| +| Get Roles | ✅ | +| Get All Roles for a Specific User | ✅ | +| Add User to a Role | ✅ | +| Remove User from a Role | ✅ | + +### Get Roles +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\GetRoles; + +$roles = $this->connector->send(new GetRoles())->dto(); +``` + +### Get All Roles For A Specific User +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\GetAllRolesForASpecificUser; + +$roles = $connector->send(new GetAllRolesForASpecificUser($userId))->dto(); +``` + +### Add User To A Role +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\AddUserToARole; + +$response = $connector->send(new AddUserToARole( + userId: $userId, + ids: [$roleId], +))->dto(); +``` + +### Remove User From A Role +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetModifyRoles\RemoveUserFromARole; + +$response = $connector->send(new RemoveUserFromARole( + userId: $userId, + ids: [$roleId], +))->dto(); +``` diff --git a/docs/General/User Management/get_users.md b/docs/General/User Management/get_users.md new file mode 100644 index 0000000..ba2771d --- /dev/null +++ b/docs/General/User Management/get_users.md @@ -0,0 +1,36 @@ +# Get Users + +| Request | Supported | +|----------------------|-----------| +| Get Users | ✅ | +| Get Users by ID | ✅ | +| Get Users of a Role | ✅ | +| Get Users of a Group | ✅ | + +### Get Users +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsers; + +$users = $this->connector->send(new GetUsers())->dto(); +``` + +### Get User By Id +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUserById; + +$user = $this->connector->send(new GetUserById($userId))->dto(); +``` + +### Get Users Of A Role +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsersOfARole; + +$users = $this->connector->send(new GetUsersOfARole($roleId))->dto(); +``` + +### Get Users Of A Group +```php +use CodebarAg\DocuWare\Requests\General\UserManagement\GetUsers\GetUsersOfAGroup; + +$users = $this->connector->send(new GetUsersOfAGroup($groupId))->dto(); +``` diff --git a/docs/General/organization.md b/docs/General/organization.md new file mode 100644 index 0000000..e4b11b9 --- /dev/null +++ b/docs/General/organization.md @@ -0,0 +1,22 @@ +# Organization + +| Request | Supported | +|-------------------------------------------------------------|-----------| +| Get Login Token | ✅ | +| Get Organization | ✅ | +| Get All File Cabinets and Document Trays | ✅ | + + +### Get Organization +```php +use CodebarAg\DocuWare\Requests\General\Organization\GetOrganization; + +$organizations = $this->connector->send(new GetOrganization())->dto(); +``` + +### Get All File Cabinets And Document Trays +```php +use CodebarAg\DocuWare\Requests\General\Organization\GetAllFileCabinetsAndDocumentTrays; + +$cabinetsAndTrays = $this->connector->send(new GetAllFileCabinetsAndDocumentTrays())->dto(); +``` diff --git a/docs/caching.md b/docs/caching.md new file mode 100644 index 0000000..a40aca2 --- /dev/null +++ b/docs/caching.md @@ -0,0 +1,39 @@ +# Caching + +> All Get Requests are cachable and will be cached by default. To determine if the response is cached you can use the following method: + +### Is Cached +```php +$connector = new DocuWareConnector(); + +$response = $connector->send(new GetDocumentRequest($fileCabinetId, $documentId)); +$response->isCached(); // false + +// Next time the request is sent + +$response = $connector->send(new GetDocumentRequest($fileCabinetId, $documentId)); +$response->isCached(); // true +``` + + +### Invalidate Cache +> To invalidate the cache for a specific request you can use the following method: +```php +$connector = new DocuWareConnector(); + +$request = new GetDocumentRequest($fileCabinetId, $documentId); +$request->invalidateCache(); + +$response = $connector->send($request); +``` + +### Disable Caching +> To temporarily disable caching for a specific request you can use the following method: +```php +$connector = new DocuWareConnector(); + +$request = new GetDocumentRequest($fileCabinetId, $documentId); +$request->disableCaching(); + +$response = $connector->send($request); +``` diff --git a/docs/dto.md b/docs/dto.md new file mode 100644 index 0000000..49eb190 --- /dev/null +++ b/docs/dto.md @@ -0,0 +1,177 @@ +# DTO + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexTextDTO { + +name: "FIELD_TEXT" // string + +value: "Value" // null|string +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexNumericDTO { + +name: "FIELD_NUMERIC" // string + +value: 1 // null|int +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDecimalDTO { + +name: "FIELD_DECIMAL" // string + +value: 1.00 // null|int|float +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateDTO { + +name: "FIELD_DATE" // string + +value: now(), // null|Carbon +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexDateTimeDTO { + +name: "FIELD_DATETIME" // string + +value: now(), // null|Carbon +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexKeywordDTO { + +name: "FIELD_KEYWORD" // string + +value: "Value" // null|string +} +``` + +```php +CodebarAg\DocuWare\DTO\Documents\DocumentIndex\IndexMemoDTO { + +name: "FIELD_MEMO" // string + +value: "Value" // null|string +} +``` + +```php +CodebarAg\DocuWare\DTO\OrganizationIndex { + +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string + +name: "Fake File Cabinet" // string + +guid: "1334c006-f095-4ae7-892b-fe59282c8bed" // string|null +} +``` + +```php +CodebarAg\DocuWare\DTO\Organization { + +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string + +name: "Fake File Cabinet" // string + +guid: "1334c006-f095-4ae7-892b-fe59282c8bed" // string|null + +additionalInfo: [] // array + +configurationRights: [] // array +} +``` + +```php +CodebarAg\DocuWare\DTO\FileCabinet { + +id: "2f071481-095d-4363-abd9-29ef845a8b05" // string + +name: "Fake File Cabinet" // string + +color: "Yellow" // string + +isBasket: true // bool + +assignedCabinet: "889c13cc-c636-4759-a704-1e6500d2d70f" // string +} +``` + +```php +CodebarAg\DocuWare\DTO\Dialog { + +id: "fae3b667-53e9-48dd-9004-34647a26112e" // string + +type: "ResultList" // string + +label: "Fake Dialog" // string + +isDefault: true // boolean + +fileCabinetId: "1334c006-f095-4ae7-892b-fe59282c8bed" // string +} +``` + +```php +CodebarAg\DocuWare\DTO\Field { + +name: "FAKE_FIELD" // string + +label: "Fake Field" // string + +type: "Memo" // string + +scope: "User" // string +``` + +```php +CodebarAg\DocuWare\DTO\Field { + +name: "FAKE_FIELD" // string + +label: "Fake Field" // string + +type: "Memo" // string + +scope: "User" // string +``` + +```php +CodebarAg\DocuWare\DTO\Document { + +id: 659732 // integer + +file_size: 765336 // integer + +total_pages: 100 // integer + +title: "Fake Title" // string + +extension: ".pdf" // string + +content_type: "application/pdf" // string + +file_cabinet_id: "a233b03d-dc63-42dd-b774-25b3ff77548f" // string + +created_at: Illuminate\Support\Carbon // Carbon + +updated_at: Illuminate\Support\Carbon // Carbon + +fields: Illuminate\Support\Collection { // Collection|DocumentField[] + #items: array:2 [ + 0 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField + 1 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField + ] + } +} +``` + +```php +CodebarAg\DocuWare\DTO\Section {#23784▶ + +id: "5589-5525" + +contentType: "text/plain" + +haveMorePages: true + +pageCount: 1 + +fileSize: 32 + +originalFileName: "example.txt" + +contentModified: "/Date(1702395557000)/" + +annotationsPreview: false + +hasTextAnnotations: null +} +``` + +```php +CodebarAg\DocuWare\DTO\DocumentThumbnail { + +mime: "image/png" // string + +data: "somedata" // string + +base64: "data:image/png;base64,WXpJNWRGcFhVbWhrUjBVOQ==" // string +} +``` + +```php +CodebarAg\DocuWare\DTO\TableRow { + +fields: Illuminate\Support\Collection { // Collection|DocumentField[] + #items: array:2 [ + 0 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField + 1 => CodebarAg\DocuWare\DTO\DocumentField // DocumentField + ] +} +``` + +```php +CodebarAg\DocuWare\DTO\DocumentPaginator + +total: 39 // integer + +per_page: 10 // integer + +current_page: 9 // integer + +last_page: 15 // integer + +from: 1 // integer + +to: 10 // integer + +documents: Illuminate\Support\Collection { // Collection|Document[] + #items: array:2 [ + 0 => CodebarAg\DocuWare\DTO\Document // Document + 1 => CodebarAg\DocuWare\DTO\Document // Document + ] + } + +error: CodebarAg\DocuWare\DTO\ErrorBag { // ErrorBag|null + +code: 422 // int + +message: "'000' is not valid cabinet id" // string + } +} +``` diff --git a/docs/encrypted_urls.md b/docs/encrypted_urls.md new file mode 100644 index 0000000..096fb32 --- /dev/null +++ b/docs/encrypted_urls.md @@ -0,0 +1,36 @@ +# Encrypted URLs + +```php +use CodebarAg\DocuWare\Facades\DocuWare; +``` + +### Make encrypted URL for a document in a file cabinet. +```php +$fileCabinetId = '87356f8d-e50c-450b-909c-4eaccd318fbf'; +$documentId = 42; + +$url = DocuWare::url() + ->fileCabinet($fileCabinetId) + ->document($documentId) + ->make(); +``` + +### Make encrypted URL for a document in a basket. +```php +$basketId = 'b_87356f8d-e50c-450b-909c-4eaccd318fbf'; + +$url = DocuWare::url() + ->basket($basketId) + ->document($documentId) + ->make(); +``` + +### Make encrypted URL valid for a specific amount of time. +> In the example below the URL is valid for one week, afterward the URL is no longer working. +```php +$url = DocuWare::url() + ->fileCabinet($fileCabinetId) + ->document($documentId) + ->validUntil(now()->addWeek()) + ->make(); +``` diff --git a/docs/exceptions.md b/docs/exceptions.md new file mode 100644 index 0000000..faef3c0 --- /dev/null +++ b/docs/exceptions.md @@ -0,0 +1,57 @@ +# Exceptions + +- `CodebarAg\DocuWare\Exceptions\UnableToMakeRequest` + +This is thrown if you are not authorized to make the request. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToProcessRequest` + +This is thrown if you passed wrong attributes. For example a file cabinet ID +which does not exist. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToLogin` + +This exception can only be thrown during the login if the credentials did not +match. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToLoginNoCookies` + +This exception can only be thrown during the login if there was no cookies in +the response from the api. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToFindPassphrase` + +This exception can only be thrown during the url making if the passphrase +could not be found. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToMakeUrl` + +Something is wrong during the URL making. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToUpdateFields` + +No fields were supplied. + +--- + +- `CodebarAg\DocuWare\Exceptions\UnableToGetDocumentCount` + +Something is wrong with the response from getting the document count. + +--- + +- `Illuminate\Http\Client\RequestException` + +All other cases if the response is not successfully. diff --git a/docs/workflow.md b/docs/workflow.md new file mode 100644 index 0000000..da58ef2 --- /dev/null +++ b/docs/workflow.md @@ -0,0 +1,25 @@ +# Workflow +| Request | Supported | +|-------------------------------------|-----------| +| Get Document Workflow History | ✅ | +| Get Document Workflow History Steps | ✅ | + +#### Get Document Workflow History +```php +use CodebarAg\DocuWare\Requests\Workflow\GetDocumentWorkflowHistory; + +$history = $this->connector->send(new GetDocumentWorkflowHistory( + $fileCabinetId, + $documentId +))->dto(); +``` + +#### Get Document Workflow History Steps +```php +use CodebarAg\DocuWare\Requests\Workflow\GetDocumentWorkflowHistorySteps; + +$historySteps = $this->connector->send(new GetDocumentWorkflowHistorySteps( + $workflowId, + $historyId, +))->dto(); +``` diff --git a/src/DocuWare.php b/src/DocuWare.php index 59914ec..cb7b385 100644 --- a/src/DocuWare.php +++ b/src/DocuWare.php @@ -23,9 +23,9 @@ public function getNewAuthenticationOAuthToken( $requestTokenResponse = (new RequestTokenWithCredentials( tokenEndpoint: $identityServiceConfigurationResponse->dto()->tokenEndpoint, + clientId: $clientId, username: $username, password: $password, - clientId: $clientId, ))->send(); return $requestTokenResponse->dto(); @@ -36,8 +36,17 @@ public function searchRequestBuilder(): DocuWareSearchRequestBuilder return new DocuWareSearchRequestBuilder; } - public function url(): DocuWareUrl - { - return new DocuWareUrl; + public function url( + string $url, + string $username, + string $password, + ?string $passphrase = null + ): DocuWareUrl { + return new DocuWareUrl( + url: $url, + username: $username, + password: $password, + passphrase: $passphrase, + ); } } diff --git a/src/DocuWareUrl.php b/src/DocuWareUrl.php index 8030fe1..e7da21c 100644 --- a/src/DocuWareUrl.php +++ b/src/DocuWareUrl.php @@ -18,6 +18,13 @@ class DocuWareUrl protected ?Carbon $validUntil = null; + public function __construct( + public string $url, + public string $username, + public string $password, + public ?string $passphrase, + ) {} + public function fileCabinet(string $fileCabinetId): self { $this->fileCabinetId = $fileCabinetId; @@ -52,8 +59,8 @@ public function make(): string $credentials = sprintf( 'User=%s\nPwd=%s', - config('laravel-docuware.credentials.username'), - config('laravel-docuware.credentials.password'), + $this->username, + $this->password, ); $lc = URL::formatWithBase64($credentials); @@ -79,7 +86,7 @@ public function make(): string } // Source: https://support.docuware.com/en-US/forums/help-with-technical-problems/ea9618df-c491-e911-80e7-0003ff59a7c6 - $key = utf8_encode(config('laravel-docuware.passphrase')); + $key = utf8_encode($this->passphrase); $passphrase = hash('sha512', $key, true); $encryption_key = substr($passphrase, 0, 32); $iv = substr($passphrase, 32, 16); @@ -93,7 +100,7 @@ public function make(): string return sprintf( '%s/DocuWare/Platform/WebClient/Integration?ep=%s', - config('laravel-docuware.credentials.url'), + $this->url, URL::format($encrypted), ); } diff --git a/src/Facades/DocuWare.php b/src/Facades/DocuWare.php index 3d882b1..e1f9ef0 100644 --- a/src/Facades/DocuWare.php +++ b/src/Facades/DocuWare.php @@ -39,7 +39,7 @@ * @method static int documentCount(string $fileCabinetId, string $dialogId) * @method static void deleteDocument(string $fileCabinetId, int $documentId) * @method static DocuWareSearchRequestBuilder search() - * @method static DocuWareUrl url() + * @method static DocuWareUrl url(string $url, string $username, string $password, null|string $passphrase = null) */ class DocuWare extends Facade { diff --git a/src/Requests/Authentication/OAuth/GetResponsibleIdentityService.php b/src/Requests/Authentication/OAuth/GetResponsibleIdentityService.php index f7c0fb8..e82fcb0 100644 --- a/src/Requests/Authentication/OAuth/GetResponsibleIdentityService.php +++ b/src/Requests/Authentication/OAuth/GetResponsibleIdentityService.php @@ -24,7 +24,8 @@ public function __construct( public function resolveEndpoint(): string { - $base = config('laravel-docuware.credentials.url').'/DocuWare/Platform'; + $url = $this->url ?? config('laravel-docuware.credentials.url'); + $base = $url.'/DocuWare/Platform'; return $base.'/Home/IdentityServiceInfo'; } diff --git a/tests/Feature/DocuWareTest.php b/tests/Feature/DocuWareTest.php index 34c9be4..db4ea66 100644 --- a/tests/Feature/DocuWareTest.php +++ b/tests/Feature/DocuWareTest.php @@ -12,7 +12,12 @@ $documentId = config('laravel-docuware.tests.document_id'); $url = (new DocuWare) - ->url() + ->url( + url: config('laravel-docuware.credentials.url'), + username: config('laravel-docuware.credentials.username'), + password: config('laravel-docuware.credentials.password'), + passphrase: config('laravel-docuware.credentials.passphrase'), + ) ->fileCabinet($fileCabinetId) ->document($documentId) ->validUntil(now()->addMinute()) @@ -36,7 +41,12 @@ $documentId = config('laravel-docuware.tests.document_id'); $url = (new DocuWare) - ->url() + ->url( + url: config('laravel-docuware.credentials.url'), + username: config('laravel-docuware.credentials.username'), + password: config('laravel-docuware.credentials.password'), + passphrase: config('laravel-docuware.credentials.passphrase'), + ) ->basket($basketId) ->document($documentId) ->validUntil(now()->addMinute())