From 5981b7eb512aa411f51cad541d01c5c6e93476f0 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 30 Jun 2025 15:04:05 +0200 Subject: [PATCH] chore: apply new CSFixer rules Signed-off-by: Ferdinand Thiessen # Conflicts: # apps/settings/lib/SetupChecks/PhpOpcacheSetup.php --- apps/cloud_federation_api/lib/Config.php | 1 + .../Controller/RequestHandlerController.php | 28 +- apps/comments/lib/Activity/Filter.php | 1 + apps/comments/lib/Activity/Provider.php | 1 + apps/comments/lib/Activity/Setting.php | 1 + apps/comments/lib/AppInfo/Application.php | 1 + .../lib/Collaboration/CommentersSorter.php | 1 + .../Controller/NotificationsController.php | 1 + apps/comments/lib/Search/Result.php | 1 + .../Collaboration/CommentersSorterTest.php | 77 +- apps/dav/appinfo/routes.php | 1 + apps/dav/lib/Avatars/RootCollection.php | 1 + apps/dav/lib/BulkUpload/BulkUploadPlugin.php | 1 + .../lib/BulkUpload/MultipartRequestParser.php | 1 + apps/dav/lib/CalDAV/Activity/Backend.php | 1 + .../lib/CalDAV/Activity/Filter/Calendar.php | 1 + apps/dav/lib/CalDAV/Activity/Filter/Todo.php | 1 + .../dav/lib/CalDAV/Activity/Provider/Base.php | 5 +- .../lib/CalDAV/Activity/Provider/Calendar.php | 1 + .../lib/CalDAV/Activity/Provider/Event.php | 1 + .../dav/lib/CalDAV/Activity/Provider/Todo.php | 1 + .../lib/CalDAV/Activity/Setting/Calendar.php | 1 + .../dav/lib/CalDAV/Activity/Setting/Event.php | 1 + apps/dav/lib/CalDAV/Activity/Setting/Todo.php | 1 + .../CalDAV/BirthdayCalendar/EnablePlugin.php | 1 + apps/dav/lib/CalDAV/BirthdayService.php | 4 +- apps/dav/lib/CalDAV/CalDavBackend.php | 9 +- apps/dav/lib/CalDAV/Calendar.php | 4 +- apps/dav/lib/CalDAV/CalendarManager.php | 1 + apps/dav/lib/CalDAV/CalendarObject.php | 1 + apps/dav/lib/CalDAV/CalendarRoot.php | 4 +- apps/dav/lib/CalDAV/EventReader.php | 10 +- apps/dav/lib/CalDAV/Export/ExportService.php | 4 +- .../ICSExportPlugin/ICSExportPlugin.php | 1 + .../CalDAV/Integration/ExternalCalendar.php | 1 + .../CalDAV/Integration/ICalendarProvider.php | 1 + .../InvitationResponseServer.php | 1 + apps/dav/lib/CalDAV/Outbox.php | 1 + apps/dav/lib/CalDAV/Principal/Collection.php | 1 + apps/dav/lib/CalDAV/Principal/User.php | 1 + apps/dav/lib/CalDAV/PublicCalendar.php | 1 + apps/dav/lib/CalDAV/PublicCalendarObject.php | 1 + .../lib/CalDAV/Publishing/PublishPlugin.php | 1 + .../lib/CalDAV/Publishing/Xml/Publisher.php | 1 + .../lib/CalDAV/Reminder/ReminderService.php | 8 +- .../AbstractPrincipalBackend.php | 11 +- .../ResourcePrincipalBackend.php | 1 + .../ResourceBooking/RoomPrincipalBackend.php | 1 + apps/dav/lib/CalDAV/Schedule/IMipPlugin.php | 2 +- apps/dav/lib/CalDAV/Schedule/IMipService.php | 22 +- apps/dav/lib/CalDAV/Schedule/Plugin.php | 4 +- apps/dav/lib/CalDAV/Search/SearchPlugin.php | 5 +- .../CalDAV/Search/Xml/Filter/CompFilter.php | 1 + .../CalDAV/Search/Xml/Filter/LimitFilter.php | 1 + .../CalDAV/Search/Xml/Filter/OffsetFilter.php | 1 + .../CalDAV/Search/Xml/Filter/ParamFilter.php | 1 + .../CalDAV/Search/Xml/Filter/PropFilter.php | 1 + .../Search/Xml/Filter/SearchTermFilter.php | 1 + .../Xml/Request/CalendarSearchReport.php | 1 + apps/dav/lib/CalDAV/TipBroker.php | 14 +- apps/dav/lib/Capabilities.php | 1 + apps/dav/lib/CardDAV/Activity/Filter.php | 1 + .../lib/CardDAV/Activity/Provider/Base.php | 4 +- apps/dav/lib/CardDAV/AddressBook.php | 4 +- apps/dav/lib/CardDAV/AddressBookImpl.php | 6 +- apps/dav/lib/CardDAV/CardDavBackend.php | 4 +- apps/dav/lib/CardDAV/PhotoCache.php | 1 + apps/dav/lib/Command/ExportCalendar.php | 2 +- apps/dav/lib/Command/ListCalendars.php | 1 + apps/dav/lib/Command/MoveCalendar.php | 1 + apps/dav/lib/Command/SendEventReminders.php | 1 + .../Sabre/AnonymousOptionsPlugin.php | 1 + .../lib/Connector/Sabre/AppleQuirksPlugin.php | 1 + apps/dav/lib/Connector/Sabre/Auth.php | 24 +- apps/dav/lib/Connector/Sabre/BearerAuth.php | 1 + apps/dav/lib/Connector/Sabre/CachingTree.php | 1 + apps/dav/lib/Connector/Sabre/DavAclPlugin.php | 2 +- .../Sabre/DummyGetResponsePlugin.php | 4 +- .../Connector/Sabre/Exception/BadGateway.php | 1 + .../lib/Connector/Sabre/FakeLockerPlugin.php | 4 +- apps/dav/lib/Connector/Sabre/FilesPlugin.php | 8 +- .../lib/Connector/Sabre/MtimeSanitizer.php | 1 + apps/dav/lib/Connector/Sabre/Principal.php | 1 + apps/dav/lib/Connector/Sabre/SharesPlugin.php | 4 +- apps/dav/lib/Connector/Sabre/TagsPlugin.php | 4 +- .../Controller/BirthdayCalendarController.php | 1 + apps/dav/lib/DAV/CustomPropertiesBackend.php | 5 +- apps/dav/lib/DAV/GroupPrincipalBackend.php | 1 + apps/dav/lib/DAV/Sharing/Backend.php | 6 +- ...UnsupportedLimitOnInitialSyncException.php | 1 + apps/dav/lib/Files/FileSearchBackend.php | 1 + apps/dav/lib/Files/LazySearchBackend.php | 1 + .../dav/lib/Files/Sharing/FilesDropPlugin.php | 1 + .../lib/Listener/DavAdminSettingsListener.php | 4 +- .../Migration/BuildCalendarSearchIndex.php | 1 + .../lib/Migration/BuildSocialSearchIndex.php | 1 + .../lib/Migration/CalDAVRemoveEmptyValue.php | 1 + .../Migration/RegenerateBirthdayCalendars.php | 1 + .../lib/Migration/RemoveObjectProperties.php | 1 + .../Version1004Date20170825134824.php | 1 + .../Version1004Date20170919104507.php | 1 + .../Version1004Date20170924124212.php | 1 + .../Version1004Date20170926103422.php | 1 + .../Version1005Date20180530124431.php | 1 + .../Version1006Date20180619154313.php | 1 + apps/dav/lib/Paginate/PaginatePlugin.php | 10 +- .../Apple/AppleProvisioningNode.php | 1 + .../Apple/AppleProvisioningPlugin.php | 1 + apps/dav/lib/Server.php | 1 + apps/dav/lib/Settings/CalDAVSettings.php | 1 + apps/dav/lib/SystemTag/SystemTagList.php | 1 + apps/dav/lib/SystemTag/SystemTagNode.php | 10 +- .../dav/lib/SystemTag/SystemTagObjectType.php | 1 + .../lib/SystemTag/SystemTagsObjectList.php | 2 +- apps/dav/lib/Traits/PrincipalProxyTrait.php | 1 + .../unit/CalDAV/CachedSubscriptionTest.php | 1 + .../tests/unit/CalDAV/CalendarImplTest.php | 4 +- .../dav/tests/unit/CalDAV/EventReaderTest.php | 32 +- .../Integration/ExternalCalendarTest.php | 4 +- .../unit/CalDAV/Publishing/PublishingTest.php | 6 +- .../Request/CalendarSearchReportTest.php | 4 +- .../tests/unit/CardDAV/CardDavBackendTest.php | 60 +- .../Sabre/CustomPropertiesBackendTest.php | 4 +- .../dav/tests/unit/DAV/ViewOnlyPluginTest.php | 2 +- .../Search/ContactsSearchProviderTest.php | 32 +- .../unit/Search/EventsSearchProviderTest.php | 328 +++---- .../unit/Search/TasksSearchProviderTest.php | 108 +- .../lib/Command/DisableMasterKey.php | 1 + apps/encryption/lib/Command/RecoverUser.php | 1 + apps/encryption/lib/Crypto/Encryption.php | 4 +- apps/encryption/lib/KeyManager.php | 8 +- .../lib/Migration/SetMasterKeyStatus.php | 1 + apps/encryption/lib/Settings/Admin.php | 1 + apps/encryption/lib/Settings/Personal.php | 1 + apps/encryption/lib/Util.php | 4 +- apps/federatedfilesharing/appinfo/routes.php | 1 + .../lib/AddressHandler.php | 4 +- .../Controller/MountPublicLinkController.php | 16 +- .../Controller/RequestHandlerController.php | 10 +- .../lib/FederatedShareProvider.php | 4 +- .../lib/Notifications.php | 8 +- .../lib/OCM/CloudFederationProviderFiles.php | 5 +- .../lib/Settings/Admin.php | 1 + .../lib/Settings/Personal.php | 4 +- .../lib/Settings/PersonalSection.php | 1 + .../lib/BackgroundJob/GetSharedSecret.php | 11 +- apps/federation/lib/Settings/Admin.php | 1 + apps/federation/templates/settings-admin.php | 4 +- .../BackgroundJob/GetSharedSecretTest.php | 22 +- .../BackgroundJob/RequestSharedSecretTest.php | 22 +- .../tests/SyncFederationAddressbooksTest.php | 32 +- apps/files/lib/Activity/FavoriteProvider.php | 1 + apps/files/lib/Activity/Filter/Favorites.php | 1 + .../files/lib/Activity/Filter/FileChanges.php | 1 + apps/files/lib/Activity/Provider.php | 1 + .../lib/Activity/Settings/FavoriteAction.php | 1 + .../lib/Activity/Settings/FileChanged.php | 1 + .../Activity/Settings/FileFavoriteChanged.php | 1 + .../files/lib/Command/DeleteOrphanedFiles.php | 4 +- apps/files/lib/Command/SanitizeFilenames.php | 2 +- apps/files/lib/Command/Scan.php | 4 +- apps/files/lib/Command/ScanAppData.php | 1 + .../Controller/DirectEditingController.php | 1 + .../DirectEditingViewController.php | 1 + .../lib/Service/DirectEditingService.php | 1 + .../lib/Service/OwnershipTransferService.php | 16 +- apps/files/lib/Service/UserConfig.php | 1 + apps/files/lib/Service/ViewConfig.php | 7 +- apps/files/templates/index.php | 1 + apps/files_external/ajax/oauth2.php | 1 + apps/files_external/appinfo/routes.php | 1 + .../lib/AppInfo/Application.php | 1 + .../files_external/lib/Command/Applicable.php | 1 + apps/files_external/lib/Command/Backends.php | 1 + apps/files_external/lib/Command/Config.php | 1 + apps/files_external/lib/Command/Create.php | 1 + apps/files_external/lib/Command/Delete.php | 1 + .../lib/Command/Dependencies.php | 1 + apps/files_external/lib/Command/Export.php | 1 + apps/files_external/lib/Command/Import.php | 9 +- .../lib/Command/ListCommand.php | 1 + apps/files_external/lib/Command/Option.php | 1 + apps/files_external/lib/Command/Verify.php | 1 + .../lib/Config/ConfigAdapter.php | 1 + .../lib/Config/ExternalMountPoint.php | 1 + .../lib/Config/IConfigHandler.php | 1 + .../lib/Config/SimpleSubstitutionTrait.php | 1 + .../files_external/lib/Config/UserContext.php | 1 + .../lib/Config/UserPlaceholderHandler.php | 1 + .../lib/Controller/AjaxController.php | 1 + .../Controller/GlobalStoragesController.php | 1 + .../lib/Controller/StoragesController.php | 1 + .../UserGlobalStoragesController.php | 1 + .../lib/Controller/UserStoragesController.php | 1 + .../lib/Lib/Auth/AmazonS3/AccessKey.php | 1 + .../lib/Lib/Auth/AuthMechanism.php | 1 + apps/files_external/lib/Lib/Auth/Builtin.php | 1 + .../lib/Lib/Auth/IUserProvided.php | 1 + .../lib/Lib/Auth/InvalidAuth.php | 1 + .../lib/Lib/Auth/NullMechanism.php | 1 + .../lib/Lib/Auth/OAuth1/OAuth1.php | 1 + .../lib/Lib/Auth/OAuth2/OAuth2.php | 1 + .../lib/Lib/Auth/OpenStack/OpenStackV2.php | 1 + .../lib/Lib/Auth/OpenStack/Rackspace.php | 1 + .../lib/Lib/Auth/Password/GlobalAuth.php | 1 + .../Lib/Auth/Password/LoginCredentials.php | 1 + .../lib/Lib/Auth/Password/Password.php | 1 + .../Lib/Auth/Password/SessionCredentials.php | 1 + .../lib/Lib/Auth/Password/UserProvided.php | 1 + .../lib/Lib/Auth/PublicKey/RSA.php | 1 + .../lib/Lib/Auth/PublicKey/RSAPrivateKey.php | 1 + .../lib/Lib/Auth/SMB/KerberosAuth.php | 1 + .../lib/Lib/Backend/AmazonS3.php | 1 + .../lib/Lib/Backend/Backend.php | 1 + apps/files_external/lib/Lib/Backend/DAV.php | 1 + apps/files_external/lib/Lib/Backend/FTP.php | 1 + .../lib/Lib/Backend/InvalidBackend.php | 1 + .../lib/Lib/Backend/LegacyBackend.php | 1 + apps/files_external/lib/Lib/Backend/Local.php | 1 + .../lib/Lib/Backend/OwnCloud.php | 1 + apps/files_external/lib/Lib/Backend/SFTP.php | 1 + .../lib/Lib/Backend/SFTP_Key.php | 1 + apps/files_external/lib/Lib/Backend/SMB.php | 1 + .../files_external/lib/Lib/Backend/SMB_OC.php | 1 + apps/files_external/lib/Lib/Backend/Swift.php | 1 + .../lib/Lib/Config/IAuthMechanismProvider.php | 1 + .../lib/Lib/Config/IBackendProvider.php | 1 + .../lib/Lib/DefinitionParameter.php | 1 + .../lib/Lib/DependencyTrait.php | 1 + .../lib/Lib/FrontendDefinitionTrait.php | 1 + .../lib/Lib/IFrontendDefinition.php | 1 + apps/files_external/lib/Lib/IIdentifier.php | 1 + .../lib/Lib/IdentifierTrait.php | 1 + ...icientDataForMeaningfulAnswerException.php | 1 + .../lib/Lib/LegacyDependencyCheckPolyfill.php | 1 + .../lib/Lib/MissingDependency.php | 1 + .../lib/Lib/Notify/SMBNotifyHandler.php | 1 + apps/files_external/lib/Lib/PersonalMount.php | 1 + apps/files_external/lib/Lib/PriorityTrait.php | 1 + .../lib/Lib/SessionStorageWrapper.php | 1 + .../lib/Lib/Storage/AmazonS3.php | 1 + apps/files_external/lib/Lib/Storage/FTP.php | 1 + .../lib/Lib/Storage/OwnCloud.php | 1 + apps/files_external/lib/Lib/Storage/SFTP.php | 1 + apps/files_external/lib/Lib/Storage/SMB.php | 1 + .../lib/Lib/Storage/StreamWrapper.php | 1 + apps/files_external/lib/Lib/StorageConfig.php | 1 + .../lib/Lib/StorageModifierTrait.php | 1 + .../lib/Lib/VisibilityTrait.php | 1 + .../lib/Migration/DummyUserSession.php | 1 + apps/files_external/lib/MountConfig.php | 1 + apps/files_external/lib/NotFoundException.php | 1 + .../lib/Service/BackendService.php | 5 +- .../lib/Service/DBConfigService.php | 1 + .../lib/Service/GlobalStoragesService.php | 1 + .../Service/ImportLegacyStoragesService.php | 1 + .../lib/Service/LegacyStoragesService.php | 1 + .../lib/Service/StoragesService.php | 1 + .../lib/Service/UserGlobalStoragesService.php | 1 + .../lib/Service/UserStoragesService.php | 1 + apps/files_external/lib/Service/UserTrait.php | 1 + apps/files_external/lib/Settings/Admin.php | 1 + apps/files_external/lib/Settings/Personal.php | 1 + .../lib/Settings/PersonalSection.php | 1 + apps/files_external/lib/Settings/Section.php | 1 + .../tests/Backend/LegacyBackendTest.php | 1 + .../tests/Command/CommandTestCase.php | 1 + .../GlobalStoragesControllerTest.php | 1 + .../tests/FrontendDefinitionTraitTest.php | 1 + .../tests/Service/BackendServiceTest.php | 1 + .../Service/UserGlobalStoragesServiceTest.php | 1 + .../tests/Service/UserStoragesServiceTest.php | 1 + apps/files_external/tests/config.php | 1 + apps/files_sharing/appinfo/routes.php | 1 + apps/files_sharing/lib/Activity/Filter.php | 1 + .../lib/Activity/Providers/Base.php | 1 + .../lib/Activity/Providers/Downloads.php | 17 +- .../lib/Activity/Providers/Groups.php | 1 + .../lib/Activity/Providers/PublicLinks.php | 1 + .../lib/Activity/Providers/RemoteShares.php | 1 + .../lib/Activity/Providers/Users.php | 1 + .../lib/Activity/Settings/PublicLinks.php | 1 + .../Activity/Settings/PublicLinksUpload.php | 1 + .../lib/Activity/Settings/RemoteShare.php | 1 + .../lib/Activity/Settings/Shared.php | 1 + apps/files_sharing/lib/Cache.php | 1 + apps/files_sharing/lib/Capabilities.php | 1 + .../Collaboration/ShareRecipientSorter.php | 1 + .../lib/Command/CleanupRemoteStorages.php | 1 + .../Controller/ExternalSharesController.php | 1 + .../Controller/PublicPreviewController.php | 1 + .../lib/Controller/RemoteController.php | 1 + .../lib/Controller/ShareAPIController.php | 50 +- .../lib/Controller/ShareController.php | 7 +- .../lib/Controller/ShareInfoController.php | 1 + .../lib/Exceptions/BrokenPath.php | 1 + .../lib/Exceptions/S2SException.php | 1 + .../lib/Exceptions/SharingRightsException.php | 1 + apps/files_sharing/lib/ExpireSharesJob.php | 1 + apps/files_sharing/lib/External/Cache.php | 1 + apps/files_sharing/lib/External/Manager.php | 1 + apps/files_sharing/lib/External/Mount.php | 1 + .../lib/External/MountProvider.php | 1 + apps/files_sharing/lib/External/Scanner.php | 1 + apps/files_sharing/lib/External/Watcher.php | 1 + apps/files_sharing/lib/Helper.php | 1 + apps/files_sharing/lib/Hooks.php | 1 + apps/files_sharing/lib/ISharedStorage.php | 1 + .../lib/Middleware/OCSShareAPIMiddleware.php | 1 + .../lib/Middleware/ShareInfoMiddleware.php | 1 + .../lib/Middleware/SharingCheckMiddleware.php | 12 +- .../lib/Migration/OwncloudGuestShareType.php | 5 +- .../lib/Migration/SetPasswordColumn.php | 1 + apps/files_sharing/lib/MountProvider.php | 9 +- .../lib/Notification/Listener.php | 8 +- .../lib/Notification/Notifier.php | 6 +- apps/files_sharing/lib/Scanner.php | 1 + .../files_sharing/lib/ShareBackend/Folder.php | 1 + apps/files_sharing/lib/SharedMount.php | 1 + apps/files_sharing/lib/SharedStorage.php | 1 + apps/files_sharing/lib/Updater.php | 11 +- apps/files_sharing/lib/ViewOnly.php | 1 + apps/files_sharing/tests/ApiTest.php | 21 +- apps/files_sharing/tests/ApplicationTest.php | 1 + apps/files_sharing/tests/CacheTest.php | 1 + apps/files_sharing/tests/CapabilitiesTest.php | 1 + .../ShareRecipientSorterTest.php | 115 ++- .../Command/CleanupRemoteStoragesTest.php | 1 + .../tests/Command/FixShareOwnersTest.php | 1 + .../ExternalShareControllerTest.php | 1 + .../PublicPreviewControllerTest.php | 1 + .../Controller/ShareAPIControllerTest.php | 259 ++--- .../tests/Controller/ShareControllerTest.php | 1 + .../Controller/ShareInfoControllerTest.php | 1 + .../Controller/ShareesAPIControllerTest.php | 1 + .../tests/DeleteOrphanedSharesJobTest.php | 1 + .../tests/EncryptedSizePropagationTest.php | 1 + .../tests/EtagPropagationTest.php | 1 + .../tests/ExpireSharesJobTest.php | 1 + .../tests/External/CacheTest.php | 1 + .../tests/External/ManagerTest.php | 1 + .../tests/External/ScannerTest.php | 1 + .../tests/ExternalStorageTest.php | 1 + .../tests/GroupEtagPropagationTest.php | 1 + apps/files_sharing/tests/HelperTest.php | 1 + apps/files_sharing/tests/LockingTest.php | 1 + .../Middleware/OCSShareAPIMiddlewareTest.php | 1 + .../Middleware/ShareInfoMiddlewareTest.php | 1 + .../Middleware/SharingCheckMiddlewareTest.php | 1 + .../tests/Migration/SetPasswordColumnTest.php | 1 + .../files_sharing/tests/MountProviderTest.php | 1 + .../tests/PropagationTestCase.php | 1 + apps/files_sharing/tests/ShareTest.php | 1 + apps/files_sharing/tests/SharedMountTest.php | 1 + .../files_sharing/tests/SharedStorageTest.php | 1 + .../tests/SizePropagationTest.php | 1 + apps/files_sharing/tests/TestCase.php | 1 + .../tests/UnshareChildrenTest.php | 1 + apps/files_sharing/tests/UpdaterTest.php | 1 + apps/files_sharing/tests/WatcherTest.php | 1 + .../lib/AppInfo/Application.php | 1 + .../lib/BackgroundJob/ExpireTrash.php | 1 + apps/files_trashbin/lib/Capabilities.php | 1 + apps/files_trashbin/lib/Command/Expire.php | 1 + .../lib/Command/ExpireTrash.php | 1 + .../lib/Command/RestoreAllFiles.php | 1 + .../lib/Events/MoveToTrashEvent.php | 1 + .../lib/Exceptions/CopyRecursiveException.php | 1 + apps/files_trashbin/lib/Expiration.php | 1 + apps/files_trashbin/lib/Helper.php | 1 + .../lib/Sabre/TrashbinPlugin.php | 6 +- apps/files_trashbin/lib/Storage.php | 5 +- .../lib/Trash/BackendNotFoundException.php | 1 + .../lib/Trash/ITrashBackend.php | 1 + apps/files_trashbin/lib/Trash/ITrashItem.php | 1 + .../lib/Trash/ITrashManager.php | 1 + .../lib/Trash/LegacyTrashBackend.php | 1 + apps/files_trashbin/lib/Trash/TrashItem.php | 1 + .../files_trashbin/lib/Trash/TrashManager.php | 5 +- apps/files_trashbin/lib/Trashbin.php | 7 +- apps/files_versions/appinfo/routes.php | 1 + .../lib/AppInfo/Application.php | 1 + .../lib/BackgroundJob/ExpireVersions.php | 1 + apps/files_versions/lib/Capabilities.php | 1 + apps/files_versions/lib/Command/CleanUp.php | 1 + apps/files_versions/lib/Command/Expire.php | 1 + .../lib/Command/ExpireVersions.php | 1 + .../lib/Controller/PreviewController.php | 1 + .../lib/Events/CreateVersionEvent.php | 1 + apps/files_versions/lib/Expiration.php | 1 + .../lib/Sabre/RootCollection.php | 1 + apps/files_versions/lib/Sabre/VersionHome.php | 1 + apps/files_versions/lib/Storage.php | 1 + .../lib/Versions/BackendNotFoundException.php | 1 + .../lib/Versions/VersionManager.php | 4 +- apps/oauth2/appinfo/routes.php | 1 + apps/oauth2/lib/Db/AccessToken.php | 1 + apps/oauth2/lib/Db/Client.php | 1 + .../LoginRedirectorControllerTest.php | 1 + .../Controller/OauthApiControllerTest.php | 13 +- .../Controller/SettingsControllerTest.php | 9 +- .../oauth2/tests/Db/AccessTokenMapperTest.php | 1 + apps/oauth2/tests/Db/ClientMapperTest.php | 1 + apps/oauth2/tests/Settings/AdminTest.php | 1 + .../lib/AppInfo/Application.php | 1 + apps/provisioning_api/lib/Capabilities.php | 1 + .../lib/Controller/UsersController.php | 16 +- .../Exceptions/NotSubAdminException.php | 1 + .../ProvisioningApiMiddlewareTest.php | 1 + apps/settings/lib/Activity/GroupProvider.php | 1 + apps/settings/lib/Activity/GroupSetting.php | 1 + apps/settings/lib/Activity/SecurityFilter.php | 1 + .../settings/lib/Activity/SecuritySetting.php | 1 + apps/settings/lib/Activity/Setting.php | 1 + .../Controller/AdminSettingsController.php | 1 + .../lib/Controller/AppSettingsController.php | 1 + .../Controller/AuthorizedGroupController.php | 2 +- .../Controller/ChangePasswordController.php | 7 +- .../lib/Controller/CommonSettingsTrait.php | 1 + .../lib/Controller/MailSettingsController.php | 1 + .../Controller/PersonalSettingsController.php | 1 + .../lib/Controller/UsersController.php | 4 +- apps/settings/lib/Hooks.php | 5 +- .../lib/Listener/MailProviderListener.php | 4 +- .../settings/lib/Mailer/NewUserMailHelper.php | 1 + apps/settings/lib/Search/AppSearch.php | 4 +- apps/settings/lib/Search/SectionSearch.php | 4 +- .../lib/Sections/Admin/Delegation.php | 1 + .../lib/Service/AuthorizedGroupService.php | 4 +- .../Settings/Admin/ArtificialIntelligence.php | 2 +- apps/settings/lib/Settings/Admin/Mail.php | 1 + apps/settings/lib/Settings/Admin/Overview.php | 1 + apps/settings/lib/Settings/Admin/Security.php | 1 + apps/settings/lib/Settings/Admin/Sharing.php | 1 + .../lib/Settings/Personal/Additional.php | 1 + .../lib/Settings/Personal/ServerDevNotice.php | 1 + .../SetupChecks/DataDirectoryProtected.php | 2 +- .../lib/SetupChecks/JavaScriptModules.php | 2 +- .../lib/SetupChecks/PhpOpcacheSetup.php | 8 +- apps/settings/templates/settings/empty.php | 1 + .../tests/Activity/SecurityFilterTest.php | 1 + .../tests/Activity/SecurityProviderTest.php | 1 + .../tests/Activity/SecuritySettingTest.php | 1 + .../AdminSettingsControllerTest.php | 1 + .../Controller/AppSettingsControllerTest.php | 1 + .../Controller/AuthSettingsControllerTest.php | 1 + .../tests/Mailer/NewUserMailHelperTest.php | 1 + .../tests/Settings/Admin/MailTest.php | 1 + .../tests/Settings/Admin/SecurityTest.php | 1 + .../tests/Settings/Admin/SharingTest.php | 1 + apps/sharebymail/lib/Activity.php | 1 + apps/sharebymail/lib/Capabilities.php | 35 +- apps/sharebymail/lib/Settings/Admin.php | 1 + apps/sharebymail/lib/ShareByMailProvider.php | 5 +- apps/sharebymail/tests/CapabilitiesTest.php | 33 +- apps/systemtags/appinfo/routes.php | 1 + apps/systemtags/lib/Activity/Provider.php | 1 + apps/systemtags/lib/Activity/Setting.php | 1 + .../lib/Controller/LastUsedController.php | 1 + apps/systemtags/lib/Settings/Admin.php | 1 + .../systemtags/tests/Activity/SettingTest.php | 1 + apps/systemtags/tests/Settings/AdminTest.php | 1 + apps/testing/clean_opcode_cache.php | 1 + .../lib/AlternativeHomeUserBackend.php | 1 + apps/testing/lib/AppInfo/Application.php | 1 + .../lib/Controller/ConfigController.php | 1 + .../lib/Controller/LockingController.php | 1 + .../Controller/RateLimitTestController.php | 1 + .../lib/Locking/FakeDBLockingProvider.php | 1 + .../lib/Provider/FakeText2ImageProvider.php | 1 + .../Provider/FakeTextProcessingProvider.php | 1 + .../FakeTextProcessingProviderSync.php | 1 + .../lib/Provider/FakeTranslationProvider.php | 1 + .../FakeContextWriteProvider.php | 1 + .../FakeTextToImageProvider.php | 1 + .../TaskProcessing/FakeTextToTextProvider.php | 1 + .../TaskProcessing/FakeTranscribeProvider.php | 1 + .../TaskProcessing/FakeTranslateProvider.php | 1 + apps/theming/appinfo/routes.php | 1 + apps/theming/lib/AppInfo/Application.php | 1 + apps/theming/lib/Capabilities.php | 1 + apps/theming/lib/Command/UpdateConfig.php | 5 +- .../theming/lib/Controller/IconController.php | 1 + .../lib/Controller/ThemingController.php | 17 +- apps/theming/lib/IconBuilder.php | 9 +- apps/theming/lib/ImageManager.php | 1 + .../lib/Service/ThemeInjectionService.php | 1 + apps/theming/lib/Service/ThemesService.php | 1 + apps/theming/lib/Settings/Admin.php | 1 + apps/theming/lib/Settings/AdminSection.php | 1 + apps/theming/lib/Settings/Personal.php | 1 + apps/theming/lib/Settings/PersonalSection.php | 1 + apps/theming/lib/ThemingDefaults.php | 9 +- apps/theming/lib/Util.php | 5 +- .../Controller/ThemingControllerTest.php | 56 +- .../Themes/DarkHighContrastThemeTest.php | 1 + .../tests/Service/BackupCodeStorageTest.php | 8 +- .../RememberBackupCodesJobTest.php | 22 +- .../Unit/Listener/ClearNotificationsTest.php | 8 +- .../lib/AppInfo/Application.php | 4 +- apps/updatenotification/templates/empty.php | 1 + .../tests/UpdateCheckerTest.php | 2 +- apps/user_ldap/lib/Access.php | 8 +- apps/user_ldap/lib/AccessFactory.php | 1 + apps/user_ldap/lib/AppInfo/Application.php | 1 + apps/user_ldap/lib/Command/ResetGroup.php | 1 + apps/user_ldap/lib/Command/ResetUser.php | 1 + .../lib/Command/TestUserSettings.php | 6 +- apps/user_ldap/lib/Connection.php | 4 +- apps/user_ldap/lib/ConnectionFactory.php | 1 + .../lib/Controller/ConfigAPIController.php | 1 + .../Controller/RenewPasswordController.php | 1 + .../lib/Exceptions/AttributeNotSet.php | 1 + .../ConstraintViolationException.php | 1 + apps/user_ldap/lib/Exceptions/NotOnLDAP.php | 1 + apps/user_ldap/lib/GroupPluginManager.php | 1 + apps/user_ldap/lib/Group_LDAP.php | 14 +- .../lib/Handler/ExtStorageConfigHandler.php | 1 + apps/user_ldap/lib/IGroupLDAP.php | 1 + apps/user_ldap/lib/ILDAPGroupPlugin.php | 1 + apps/user_ldap/lib/ILDAPUserPlugin.php | 1 + apps/user_ldap/lib/IUserLDAP.php | 5 +- apps/user_ldap/lib/Jobs/CleanUp.php | 4 +- apps/user_ldap/lib/Migration/UUIDFix.php | 1 + apps/user_ldap/lib/Migration/UUIDFixGroup.php | 1 + .../user_ldap/lib/Migration/UUIDFixInsert.php | 1 + apps/user_ldap/lib/Migration/UUIDFixUser.php | 1 + apps/user_ldap/lib/Notification/Notifier.php | 1 + apps/user_ldap/lib/Settings/Admin.php | 1 + apps/user_ldap/lib/Settings/Section.php | 1 + apps/user_ldap/lib/User/DeletedUsersIndex.php | 1 + apps/user_ldap/lib/User/User.php | 6 +- apps/user_ldap/lib/UserPluginManager.php | 1 + apps/user_ldap/lib/User_LDAP.php | 12 +- apps/user_ldap/lib/User_Proxy.php | 10 +- apps/user_ldap/lib/Wizard.php | 8 +- apps/user_ldap/lib/WizardResult.php | 2 +- .../user_ldap/tests/Integration/Bootstrap.php | 1 + .../Lib/IntegrationTestAttributeDetection.php | 1 + .../lib/Listener/UserLiveStatusListener.php | 4 +- .../lib/Service/PHPMongoQuery.php | 28 +- apps/workflowengine/appinfo/routes.php | 1 + .../lib/AppInfo/Application.php | 1 + .../lib/BackgroundJobs/Rotate.php | 1 + .../lib/Check/AbstractStringCheck.php | 5 +- .../workflowengine/lib/Check/FileMimeType.php | 23 +- apps/workflowengine/lib/Check/FileSize.php | 1 + .../lib/Check/FileSystemTags.php | 1 + .../lib/Check/RequestRemoteAddress.php | 1 + apps/workflowengine/lib/Check/RequestTime.php | 1 + apps/workflowengine/lib/Check/RequestURL.php | 9 +- .../lib/Check/RequestUserAgent.php | 1 + .../lib/Check/UserGroupMembership.php | 1 + .../lib/Controller/RequestTimeController.php | 1 + apps/workflowengine/lib/Manager.php | 1 + apps/workflowengine/lib/Settings/Section.php | 1 + apps/workflowengine/tests/ManagerTest.php | 1 + build/gen-coverage-badge.php | 1 + .../features/bootstrap/AppConfiguration.php | 1 + .../integration/features/bootstrap/Avatar.php | 13 +- .../features/bootstrap/BasicStructure.php | 1 + .../features/bootstrap/CalDavContext.php | 1 + .../bootstrap/CapabilitiesContext.php | 1 + .../features/bootstrap/CardDavContext.php | 1 + .../features/bootstrap/ChecksumsContext.php | 1 + .../features/bootstrap/CommandLine.php | 1 + .../features/bootstrap/CommandLineContext.php | 1 + .../features/bootstrap/CommentsContext.php | 1 + .../features/bootstrap/ContactsMenu.php | 1 + .../features/bootstrap/ConversionsContext.php | 1 + .../features/bootstrap/DavFeatureContext.php | 1 + .../features/bootstrap/Download.php | 1 + .../features/bootstrap/ExternalStorage.php | 1 + .../features/bootstrap/FakeSMTPHelper.php | 1 + .../features/bootstrap/FeatureContext.php | 1 + .../features/bootstrap/FederationContext.php | 1 + .../features/bootstrap/FilesDropContext.php | 5 +- .../features/bootstrap/LDAPContext.php | 1 + build/integration/features/bootstrap/Mail.php | 1 + .../features/bootstrap/MetadataContext.php | 1 + .../PrincipalPropertySearchContext.php | 1 + .../features/bootstrap/Provisioning.php | 1 + .../bootstrap/RateLimitingContext.php | 1 + .../features/bootstrap/RemoteContext.php | 1 + .../features/bootstrap/RoutingContext.php | 1 + .../integration/features/bootstrap/Search.php | 1 + .../features/bootstrap/SetupContext.php | 1 + .../features/bootstrap/ShareesContext.php | 1 + .../features/bootstrap/Sharing.php | 15 +- .../features/bootstrap/SharingContext.php | 1 + .../features/bootstrap/TagsContext.php | 7 +- .../features/bootstrap/TalkContext.php | 1 + .../features/bootstrap/Trashbin.php | 1 + .../integration/features/bootstrap/WebDav.php | 1 + build/license.php | 7 +- core/Command/App/Disable.php | 1 + core/Command/App/ListApps.php | 1 + core/Command/Config/System/Base.php | 1 + core/Command/Db/ConvertFilecacheBigInt.php | 1 + core/Command/Db/ConvertMysqlToMB4.php | 1 + core/Command/Db/Migrations/ExecuteCommand.php | 1 + .../Command/Db/Migrations/GenerateCommand.php | 5 +- .../Encryption/ChangeKeyStorageRoot.php | 8 +- core/Command/Encryption/EncryptAll.php | 1 + core/Command/Encryption/MigrateKeyStorage.php | 16 +- core/Command/Group/AddUser.php | 1 + core/Command/Group/ListCommand.php | 1 + core/Command/Group/RemoveUser.php | 1 + core/Command/Maintenance/Install.php | 4 +- core/Command/Maintenance/UpdateTheme.php | 1 + core/Command/SetupChecks.php | 12 +- core/Command/SystemTag/Add.php | 1 + core/Command/SystemTag/Delete.php | 1 + core/Command/SystemTag/Edit.php | 1 + core/Command/SystemTag/ListCommand.php | 1 + .../Command/TaskProcessing/EnabledCommand.php | 7 +- core/Command/TaskProcessing/GetCommand.php | 1 + core/Command/TaskProcessing/ListCommand.php | 1 + core/Command/TaskProcessing/Statistics.php | 1 + core/Command/TwoFactorAuth/Base.php | 1 + core/Command/Upgrade.php | 6 +- core/Command/User/AuthTokens/Delete.php | 1 + core/Command/User/AuthTokens/ListCommand.php | 1 + core/Command/User/Info.php | 1 + core/Command/User/ListCommand.php | 1 + core/Command/User/SyncAccountDataCommand.php | 1 + core/Command/User/Welcome.php | 1 + core/Controller/AvatarController.php | 4 +- core/Controller/ClientFlowLoginController.php | 5 +- core/Controller/ContactsMenuController.php | 1 + core/Controller/GuestAvatarController.php | 1 + core/Controller/LoginController.php | 4 +- core/Controller/NavigationController.php | 1 + core/Controller/OCJSController.php | 1 + core/Controller/OCSController.php | 1 + core/Controller/WalledGardenController.php | 1 + core/Controller/WhatsNewController.php | 1 + .../Version13000Date20170705121758.php | 1 + .../Version13000Date20170718121200.php | 1 + .../Version13000Date20170814074715.php | 1 + .../Version13000Date20170919121250.php | 1 + .../Version13000Date20170926101637.php | 1 + .../Version14000Date20180129121024.php | 1 + .../Version14000Date20180516101403.php | 1 + .../Version14000Date20180626223656.php | 1 + .../Version14000Date20180712153140.php | 1 + .../Version23000Date20210721100600.php | 2 +- .../Version25000Date20220515204012.php | 1 + .../Version29000Date20240131122720.php | 4 +- .../Version30000Date20240906095113.php | 2 +- lib/base.php | 8 +- lib/private/Accounts/Hooks.php | 1 + lib/private/Activity/Event.php | 15 +- lib/private/Activity/EventMerger.php | 1 + lib/private/Activity/Manager.php | 1 + lib/private/AllConfig.php | 1 + lib/private/App/AppManager.php | 11 +- lib/private/App/AppStore/Bundles/Bundle.php | 1 + .../App/AppStore/Bundles/BundleFetcher.php | 1 + .../App/AppStore/Bundles/EducationBundle.php | 1 + .../App/AppStore/Bundles/EnterpriseBundle.php | 1 + .../App/AppStore/Bundles/GroupwareBundle.php | 1 + .../AppStore/Bundles/PublicSectorBundle.php | 1 + .../AppStore/Bundles/SocialSharingBundle.php | 1 + .../AppStore/Fetcher/AppDiscoverFetcher.php | 1 + .../App/AppStore/Fetcher/AppFetcher.php | 5 +- .../App/AppStore/Fetcher/CategoryFetcher.php | 1 + lib/private/App/AppStore/Fetcher/Fetcher.php | 1 + lib/private/App/AppStore/Version/Version.php | 1 + .../App/AppStore/Version/VersionParser.php | 1 + lib/private/App/DependencyAnalyzer.php | 1 + lib/private/App/InfoParser.php | 1 + lib/private/App/Platform.php | 1 + lib/private/App/PlatformRepository.php | 1 + lib/private/AppConfig.php | 4 +- .../AppFramework/Bootstrap/Coordinator.php | 4 +- .../DependencyInjection/DIContainer.php | 5 +- lib/private/AppFramework/Http.php | 4 +- .../FlowV2EphemeralSessionsMiddleware.php | 4 +- .../AppFramework/Middleware/OCSMiddleware.php | 1 + .../NeedAuthenticationException.php | 1 + .../PublicShare/PublicShareMiddleware.php | 1 + .../Middleware/Security/CORSMiddleware.php | 12 +- .../Exceptions/AppNotEnabledException.php | 1 + .../LaxSameSiteCookieFailedException.php | 1 + .../Exceptions/NotConfirmedException.php | 1 + .../PasswordConfirmationMiddleware.php | 1 + .../Security/SameSiteCookieMiddleware.php | 1 + .../Security/SecurityMiddleware.php | 4 +- lib/private/AppFramework/OCS/BaseResponse.php | 7 +- lib/private/AppFramework/OCS/V1Response.php | 1 + lib/private/AppFramework/OCS/V2Response.php | 1 + .../AppFramework/Utility/SimpleContainer.php | 4 +- lib/private/AppScriptDependency.php | 1 + lib/private/AppScriptSort.php | 1 + .../LoginCredentials/Credentials.php | 1 + .../Authentication/Token/TokenCleanupJob.php | 1 + .../Authentication/TwoFactorAuth/Manager.php | 4 +- lib/private/Avatar/UserAvatar.php | 4 +- lib/private/Calendar/Manager.php | 2 +- .../Collaboration/AutoComplete/Manager.php | 1 + .../Collaborators/GroupPlugin.php | 1 + .../Collaborators/LookupPlugin.php | 1 + .../Collaborators/MailPlugin.php | 5 +- .../Collaborators/RemoteGroupPlugin.php | 1 + .../Collaborators/RemotePlugin.php | 1 + .../Collaboration/Collaborators/Search.php | 1 + .../Collaborators/SearchResult.php | 1 + .../Collaborators/UserPlugin.php | 15 +- .../Collaboration/Resources/Collection.php | 4 +- lib/private/Color.php | 1 + lib/private/Command/CronBus.php | 1 + lib/private/Config/UserConfig.php | 4 +- lib/private/Console/Application.php | 4 +- .../Contacts/ContactsMenu/ActionFactory.php | 1 + .../ContactsMenu/Actions/LinkAction.php | 1 + lib/private/Contacts/ContactsMenu/Manager.php | 1 + .../ContactsMenu/Providers/EMailProvider.php | 1 + lib/private/DB/Connection.php | 6 +- lib/private/DB/MigrationService.php | 1 + lib/private/DB/MySqlTools.php | 5 +- .../SqliteExpressionBuilder.php | 1 + .../FunctionBuilder/FunctionBuilder.php | 1 + .../FunctionBuilder/OCIFunctionBuilder.php | 1 + .../FunctionBuilder/PgSqlFunctionBuilder.php | 1 + .../FunctionBuilder/SqliteFunctionBuilder.php | 1 + .../Partitioned/PartitionedQueryBuilder.php | 8 +- lib/private/DB/SchemaWrapper.php | 1 + lib/private/Diagnostics/Event.php | 1 + lib/private/Diagnostics/EventLogger.php | 1 + lib/private/Diagnostics/Query.php | 2 +- lib/private/DirectEditing/Manager.php | 1 + lib/private/DirectEditing/Token.php | 1 + lib/private/EmojiHelper.php | 26 +- lib/private/Encryption/Keys/Storage.php | 1 + lib/private/Encryption/Util.php | 4 +- .../Federation/CloudFederationFactory.php | 1 + .../CloudFederationNotification.php | 1 + .../CloudFederationProviderManager.php | 4 +- .../Federation/CloudFederationShare.php | 1 + lib/private/Files/Cache/Cache.php | 4 +- lib/private/Files/Cache/QuerySearchHelper.php | 1 + lib/private/Files/Cache/SearchBuilder.php | 1 + .../Files/Cache/Wrapper/JailPropagator.php | 1 + .../Files/Config/CachedMountFileInfo.php | 1 + lib/private/Files/Config/UserMountCache.php | 6 +- .../Files/Conversion/ConversionManager.php | 4 +- lib/private/Files/Node/Folder.php | 1 + lib/private/Files/Notify/Change.php | 1 + lib/private/Files/Notify/RenameChange.php | 1 + lib/private/Files/ObjectStore/Azure.php | 1 + .../Files/ObjectStore/ObjectStoreStorage.php | 4 +- lib/private/Files/ObjectStore/S3.php | 1 + .../Files/ObjectStore/S3ConnectionTrait.php | 1 + lib/private/Files/ObjectStore/S3Signature.php | 1 + .../Files/ObjectStore/StorageObjectStore.php | 1 + .../QueryOptimizer/FlattenNestedBool.php | 4 +- .../FlattenSingleArgumentBinaryOperation.php | 10 +- .../Search/QueryOptimizer/OrEqualsToIn.php | 4 +- .../QueryOptimizer/PathPrefixOptimizer.php | 6 +- .../Search/QueryOptimizer/SplitLargeIn.php | 6 +- .../Files/Search/SearchBinaryOperator.php | 1 + lib/private/Files/Search/SearchOrder.php | 1 + lib/private/Files/Search/SearchQuery.php | 1 + lib/private/Files/SetupManager.php | 6 +- lib/private/Files/SimpleFS/SimpleFile.php | 1 + lib/private/Files/SimpleFS/SimpleFolder.php | 1 + lib/private/Files/Storage/Common.php | 4 +- .../Files/Storage/Wrapper/Encryption.php | 28 +- lib/private/Files/Stream/Encryption.php | 8 +- .../Files/Stream/SeekableHttpStream.php | 1 + .../FullTextSearch/FullTextSearchManager.php | 6 +- .../FullTextSearch/Model/IndexDocument.php | 4 +- lib/private/GlobalScale/Config.php | 1 + lib/private/Hooks/BasicEmitter.php | 1 + lib/private/Hooks/Emitter.php | 1 + lib/private/Hooks/EmitterTrait.php | 1 + lib/private/Hooks/PublicEmitter.php | 1 + lib/private/Http/Client/Client.php | 4 +- lib/private/Http/Client/Response.php | 6 +- lib/private/Image.php | 10 +- lib/private/L10N/Factory.php | 12 +- .../L10N/LanguageNotFoundException.php | 1 + lib/private/LargeFileHelper.php | 1 + lib/private/Lockdown/Filesystem/NullCache.php | 1 + .../Lockdown/Filesystem/NullStorage.php | 1 + lib/private/Lockdown/LockdownManager.php | 1 + lib/private/Log.php | 6 +- lib/private/Log/ExceptionSerializer.php | 1 + lib/private/Log/LogDetails.php | 1 + lib/private/Log/LogFactory.php | 1 + lib/private/Log/Systemdlog.php | 1 + lib/private/Mail/Message.php | 4 +- lib/private/Mail/Provider/Manager.php | 18 +- lib/private/Memcache/APCu.php | 1 + lib/private/Memcache/ArrayCache.php | 1 + lib/private/Memcache/CADTrait.php | 1 + lib/private/Memcache/CASTrait.php | 1 + lib/private/Memcache/Cache.php | 1 + lib/private/Memcache/Factory.php | 5 +- lib/private/Memcache/Memcached.php | 5 +- lib/private/Memcache/NullCache.php | 1 + lib/private/Memcache/Redis.php | 1 + lib/private/Migration/ConsoleOutput.php | 1 + lib/private/Migration/NullOutput.php | 1 + lib/private/Migration/SimpleOutput.php | 1 + lib/private/Notification/Notification.php | 18 +- lib/private/Preview/Bundled.php | 1 + lib/private/Preview/GeneratorHelper.php | 1 + lib/private/Preview/Imaginary.php | 1 + lib/private/Preview/Krita.php | 1 + lib/private/Preview/MimeIconProvider.php | 5 +- lib/private/Preview/SGI.php | 1 + lib/private/Preview/TGA.php | 1 + lib/private/PreviewNotAvailableException.php | 1 + lib/private/Profile/ProfileManager.php | 4 +- lib/private/RedisFactory.php | 8 +- lib/private/Remote/Api/ApiBase.php | 1 + lib/private/Remote/Api/ApiCollection.php | 1 + lib/private/Remote/Api/ApiFactory.php | 1 + lib/private/Remote/Api/NotFoundException.php | 1 + lib/private/Remote/Api/OCS.php | 1 + lib/private/Remote/Credentials.php | 1 + lib/private/Remote/Instance.php | 1 + lib/private/Remote/InstanceFactory.php | 1 + lib/private/Remote/User.php | 1 + .../Repair/AddCleanupUpdaterBackupsJob.php | 1 + .../Repair/AddMetadataGenerationJob.php | 1 + lib/private/Repair/ClearFrontendCaches.php | 1 + .../Repair/ClearGeneratedAvatarCache.php | 1 + .../Repair/ClearGeneratedAvatarCacheJob.php | 1 + lib/private/Repair/Collation.php | 20 +- lib/private/Repair/MoveUpdaterStepFile.php | 1 + lib/private/Repair/NC13/AddLogRotateJob.php | 1 + .../NC21/AddCheckForUserCertificatesJob.php | 1 + lib/private/Repair/Owncloud/CleanPreviews.php | 1 + .../Repair/Owncloud/DropAccountTermsTable.php | 1 + lib/private/Repair/Owncloud/MoveAvatars.php | 1 + .../Repair/Owncloud/SaveAccountsTableData.php | 1 + .../Repair/Owncloud/UpdateLanguageCodes.php | 1 + lib/private/Repair/RepairMimeTypes.php | 2 +- lib/private/Security/Hasher.php | 8 +- .../Signature/Model/SignedRequest.php | 4 +- .../VerificationToken/VerificationToken.php | 6 +- lib/private/Settings/Manager.php | 1 + lib/private/Settings/Section.php | 1 + lib/private/Setup.php | 8 +- lib/private/Share/Share.php | 4 +- .../Share20/Exception/BackendError.php | 1 + .../Share20/Exception/InvalidShare.php | 1 + lib/private/Share20/LegacyHooks.php | 7 +- lib/private/Share20/Manager.php | 64 +- lib/private/Share20/ProviderFactory.php | 6 +- lib/private/Share20/Share.php | 6 +- lib/private/Share20/ShareAttributes.php | 4 +- lib/private/Share20/ShareHelper.php | 1 + lib/private/Support/Subscription/Registry.php | 4 +- .../SynchronousBackgroundJob.php | 4 +- lib/private/Teams/TeamManager.php | 1 + lib/private/Template/JSCombiner.php | 1 + lib/private/Updater.php | 12 +- .../User/Listeners/UserChangedListener.php | 2 +- lib/private/User/Manager.php | 6 +- lib/private/User/Session.php | 1 + lib/private/legacy/OC_Defaults.php | 6 +- lib/private/legacy/OC_Util.php | 4 +- .../PropertyDoesNotExistException.php | 1 + lib/public/Activity/IEventMerger.php | 1 + lib/public/Activity/IFilter.php | 1 + lib/public/Activity/IProvider.php | 1 + lib/public/Activity/ISetting.php | 1 + lib/public/App/AppPathNotFoundException.php | 1 + lib/public/AppFramework/App.php | 24 +- lib/public/AppFramework/Controller.php | 4 +- lib/public/AppFramework/Db/Entity.php | 8 +- lib/public/AppFramework/Db/QBMapper.php | 4 +- .../AppFramework/Http/FileDisplayResponse.php | 1 + .../Http/Template/ExternalShareMenuAction.php | 1 + .../Http/Template/IMenuAction.php | 1 + .../Http/Template/LinkMenuAction.php | 1 + .../Http/Template/PublicTemplateResponse.php | 1 + .../Http/Template/SimpleMenuAction.php | 1 + .../OCS/OCSBadRequestException.php | 1 + lib/public/AppFramework/OCS/OCSException.php | 1 + .../OCS/OCSForbiddenException.php | 1 + .../AppFramework/OCS/OCSNotFoundException.php | 1 + .../OCS/OCSPreconditionFailedException.php | 1 + .../AppFramework/PublicShareController.php | 4 +- .../CredentialsUnavailableException.php | 1 + .../PasswordUnavailableException.php | 1 + .../IProvideUserSecretBackend.php | 1 + .../LoginCredentials/ICredentials.php | 1 + lib/public/BackgroundJob/TimedJob.php | 4 +- lib/public/BeforeSabrePubliclyLoadedEvent.php | 1 + ...BackendTemporarilyUnavailableException.php | 1 + lib/public/Calendar/ICalendarExport.php | 2 +- lib/public/Calendar/ICalendarIsEnabled.php | 2 +- lib/public/Calendar/ICalendarIsShared.php | 2 +- lib/public/Calendar/ICalendarIsWritable.php | 2 +- lib/public/Calendar/IMetadataProvider.php | 1 + lib/public/Calendar/Resource/IBackend.php | 1 + lib/public/Calendar/Resource/IResource.php | 1 + .../Calendar/Resource/IResourceMetadata.php | 1 + lib/public/Calendar/Room/IBackend.php | 1 + lib/public/Calendar/Room/IRoom.php | 1 + lib/public/Calendar/Room/IRoomMetadata.php | 1 + lib/public/Capabilities/IPublicCapability.php | 1 + .../Collaboration/AutoComplete/IManager.php | 1 + .../Collaboration/AutoComplete/ISorter.php | 1 + .../Collaboration/Collaborators/ISearch.php | 1 + .../Collaborators/ISearchPlugin.php | 1 + .../Collaborators/ISearchResult.php | 1 + .../Collaborators/SearchResultType.php | 1 + lib/public/Color.php | 1 + lib/public/Comments/ICommentsEventHandler.php | 1 + lib/public/Contacts/ContactsMenu/IAction.php | 1 + .../Contacts/ContactsMenu/IActionFactory.php | 1 + .../Contacts/ContactsMenu/IContactsStore.php | 1 + lib/public/Contacts/ContactsMenu/IEntry.php | 1 + .../Contacts/ContactsMenu/ILinkAction.php | 1 + lib/public/DB/ISchemaWrapper.php | 1 + .../DB/QueryBuilder/IFunctionBuilder.php | 1 + lib/public/DirectEditing/ACreateEmpty.php | 1 + .../DirectEditing/ACreateFromTemplate.php | 1 + lib/public/DirectEditing/ATemplate.php | 1 + lib/public/DirectEditing/IToken.php | 1 + .../RegisterDirectEditorEvent.php | 1 + .../ActionNotSupportedException.php | 1 + .../AuthenticationFailedException.php | 1 + .../Exceptions/BadRequestException.php | 1 + .../ProviderAlreadyExistsException.php | 1 + .../ProviderCouldNotAddShareException.php | 1 + .../ProviderDoesNotExistsException.php | 1 + .../Federation/ICloudFederationFactory.php | 1 + .../ICloudFederationNotification.php | 1 + .../Federation/ICloudFederationProvider.php | 1 + .../ICloudFederationProviderManager.php | 1 + .../Federation/ICloudFederationShare.php | 1 + lib/public/Files.php | 1 + .../Files/Config/ICachedMountFileInfo.php | 1 + lib/public/Files/DavUtil.php | 1 + lib/public/Files/EmptyFileNameException.php | 1 + lib/public/Files/GenericFileException.php | 1 + lib/public/Files/IAppData.php | 1 + .../Files/InvalidDirectoryException.php | 1 + lib/public/Files/Notify/IChange.php | 1 + lib/public/Files/Notify/INotifyHandler.php | 1 + lib/public/Files/Notify/IRenameChange.php | 1 + .../Files/Search/ISearchBinaryOperator.php | 1 + lib/public/Files/Search/ISearchComparison.php | 3 +- lib/public/Files/Search/ISearchOperator.php | 1 + lib/public/Files/Search/ISearchOrder.php | 1 + lib/public/Files/Search/ISearchQuery.php | 1 + lib/public/Files/SimpleFS/ISimpleFile.php | 1 + lib/public/Files/SimpleFS/ISimpleFolder.php | 1 + lib/public/Files/SimpleFS/ISimpleRoot.php | 1 + .../Files/Storage/IChunkedFileWrite.php | 1 + .../Storage/IDisableEncryptionStorage.php | 1 + lib/public/Files/Storage/INotifyStorage.php | 1 + .../Template/RegisterTemplateCreatorEvent.php | 1 + lib/public/GlobalScale/IConfig.php | 1 + lib/public/Group/Backend/INamedBackend.php | 1 + lib/public/IAddressBook.php | 1 + lib/public/LDAP/IDeletionFlagSupport.php | 3 +- lib/public/LDAP/ILDAPProvider.php | 1 + lib/public/LDAP/ILDAPProviderFactory.php | 1 + lib/public/Lockdown/ILockdownManager.php | 1 + lib/public/Log/IFileBased.php | 1 + lib/public/Log/ILogFactory.php | 1 + lib/public/Log/IWriter.php | 1 + lib/public/Log/RotationTrait.php | 1 + lib/public/Mail/Provider/IAddress.php | 2 +- lib/public/Mail/Provider/IManager.php | 2 +- lib/public/Mail/Provider/IMessage.php | 4 +- lib/public/Migration/Attributes/AddColumn.php | 4 +- .../Migration/Attributes/DropColumn.php | 4 +- .../Migration/Attributes/ModifyColumn.php | 4 +- .../OCM/ICapabilityAwareOCMProvider.php | 6 +- lib/public/Remote/Api/IApiCollection.php | 1 + lib/public/Remote/Api/IApiFactory.php | 1 + lib/public/Remote/Api/ICapabilitiesApi.php | 1 + lib/public/Remote/Api/IUserApi.php | 1 + lib/public/Remote/ICredentials.php | 1 + lib/public/Remote/IInstance.php | 1 + lib/public/Remote/IInstanceFactory.php | 1 + lib/public/Remote/IUser.php | 1 + lib/public/RichObjectStrings/Definitions.php | 1 + .../InvalidObjectExeption.php | 1 + lib/public/Settings/IIconSection.php | 1 + lib/public/Settings/IManager.php | 1 + lib/public/Settings/ISettings.php | 1 + lib/public/Share/IAttributes.php | 1 + lib/public/Share/IShareHelper.php | 1 + lib/public/Teams/ITeamManager.php | 1 + lib/public/Teams/ITeamResourceProvider.php | 1 + lib/public/Teams/Team.php | 1 + lib/public/Teams/TeamResource.php | 1 + lib/public/WorkflowEngine/ICheck.php | 1 + lib/public/WorkflowEngine/IManager.php | 1 + lib/public/WorkflowEngine/IOperation.php | 1 + ocs-provider/index.php | 1 + ocs/v2.php | 1 + tests/Core/Command/Config/ImportTest.php | 1 + tests/Core/Command/Config/ListConfigsTest.php | 1 + .../Command/Config/System/CastHelperTest.php | 1 + .../Config/System/DeleteConfigTest.php | 1 + .../Command/Config/System/GetConfigTest.php | 1 + .../Command/Config/System/SetConfigTest.php | 1 + .../Encryption/ChangeKeyStorageRootTest.php | 1 + .../Command/Encryption/DecryptAllTest.php | 1 + tests/Core/Command/Encryption/DisableTest.php | 1 + tests/Core/Command/Encryption/EnableTest.php | 1 + .../Command/Encryption/EncryptAllTest.php | 1 + .../Encryption/SetDefaultModuleTest.php | 1 + tests/Core/Command/Group/AddTest.php | 1 + tests/Core/Command/Group/AddUserTest.php | 1 + tests/Core/Command/Group/DeleteTest.php | 1 + tests/Core/Command/Group/InfoTest.php | 1 + tests/Core/Command/Group/ListCommandTest.php | 1 + tests/Core/Command/Group/RemoveUserTest.php | 1 + tests/Core/Command/Log/FileTest.php | 1 + tests/Core/Command/Log/ManageTest.php | 1 + .../Maintenance/DataFingerprintTest.php | 1 + .../Maintenance/Mimetype/UpdateDBTest.php | 1 + tests/Core/Command/Maintenance/ModeTest.php | 1 + .../Core/Command/Maintenance/UpdateTheme.php | 1 + tests/Core/Command/Preview/CleanupTest.php | 1 + tests/Core/Command/Preview/RepairTest.php | 1 + tests/Core/Command/SystemTag/AddTest.php | 1 + tests/Core/Command/SystemTag/DeleteTest.php | 1 + tests/Core/Command/SystemTag/EditTest.php | 1 + .../Command/SystemTag/ListCommandTest.php | 1 + tests/Core/Command/User/AddTest.php | 1 + .../Command/User/AuthTokens/DeleteTest.php | 1 + tests/Core/Command/User/DeleteTest.php | 1 + tests/Core/Command/User/DisableTest.php | 1 + tests/Core/Command/User/EnableTest.php | 1 + tests/Core/Command/User/LastSeenTest.php | 1 + tests/Core/Command/User/SettingTest.php | 1 + .../Controller/AutoCompleteControllerTest.php | 1 + .../Core/Controller/AvatarControllerTest.php | 1 + .../ChangePasswordControllerTest.php | 1 + .../ClientFlowLoginControllerTest.php | 4 +- tests/Core/Controller/CssControllerTest.php | 1 + .../Controller/GuestAvatarControllerTest.php | 1 + tests/Core/Controller/JsControllerTest.php | 1 + tests/Core/Controller/LostControllerTest.php | 1 + .../Controller/NavigationControllerTest.php | 1 + tests/Core/Controller/OCSControllerTest.php | 1 + .../Core/Controller/PreviewControllerTest.php | 1 + tests/Core/Controller/UserControllerTest.php | 1 + .../Core/Data/LoginFlowV2CredentialsTest.php | 1 + tests/bootstrap.php | 1 + tests/databases-all-config.php | 1 + tests/enable_all.php | 1 + tests/lib/Accounts/AccountPropertyTest.php | 1 + tests/lib/Accounts/AccountTest.php | 1 + tests/lib/Accounts/HooksTest.php | 1 + tests/lib/AllConfigTest.php | 33 +- tests/lib/App/AppStore/Bundles/BundleBase.php | 1 + .../AppStore/Bundles/BundleFetcherTest.php | 1 + .../AppStore/Bundles/EducationBundleTest.php | 1 + .../AppStore/Bundles/EnterpriseBundleTest.php | 1 + .../AppStore/Bundles/GroupwareBundleTest.php | 1 + .../Bundles/SocialSharingBundleTest.php | 1 + .../Fetcher/AppDiscoverFetcherTest.php | 1 + .../App/AppStore/Fetcher/AppFetcherTest.php | 929 +++++++++--------- .../AppStore/Fetcher/CategoryFetcherTest.php | 1 + .../lib/App/AppStore/Fetcher/FetcherBase.php | 1 + .../AppStore/Version/VersionParserTest.php | 1 + .../lib/App/AppStore/Version/VersionTest.php | 1 + tests/lib/App/DependencyAnalyzerTest.php | 1 + tests/lib/App/InfoParserTest.php | 1 + tests/lib/App/PlatformRepositoryTest.php | 1 + tests/lib/AppConfigTest.php | 4 +- tests/lib/AppFramework/AppTest.php | 10 +- .../AuthPublicShareControllerTest.php | 1 + .../Controller/OCSControllerTest.php | 52 +- .../Controller/PublicShareControllerTest.php | 1 + tests/lib/AppFramework/Db/QBMapperDBTest.php | 1 + tests/lib/AppFramework/Db/QBMapperTest.php | 1 + .../DIIntergrationTests.php | 1 + .../Http/ContentSecurityPolicyTest.php | 1 + .../Http/EmptyContentSecurityPolicyTest.php | 1 + .../Http/FileDisplayResponseTest.php | 1 + tests/lib/AppFramework/Http/OutputTest.php | 1 + tests/lib/AppFramework/Http/RequestStream.php | 1 + tests/lib/AppFramework/Http/RequestTest.php | 1 + .../Middleware/OCSMiddlewareTest.php | 1 + .../PublicShare/PublicShareMiddlewareTest.php | 1 + .../Security/BruteForceMiddlewareTest.php | 1 + .../Security/CORSMiddlewareTest.php | 1 + .../PasswordConfirmationMiddlewareTest.php | 1 + .../Security/SameSiteCookieMiddlewareTest.php | 1 + .../Security/SecurityMiddlewareTest.php | 9 +- .../lib/AppFramework/OCS/BaseResponseTest.php | 2 +- tests/lib/AppScriptSortTest.php | 1 + tests/lib/AppTest.php | 1 + tests/lib/Archive/TARTest.php | 1 + tests/lib/Archive/TestBase.php | 1 + tests/lib/Archive/ZIPTest.php | 1 + .../Login/ALoginTestCommand.php | 1 + .../Token/PublicKeyTokenProviderTest.php | 26 +- .../TwoFactorAuth/EnforcementStateTest.php | 1 + .../TwoFactorAuth/ProviderManagerTest.php | 4 +- tests/lib/Avatar/AvatarManagerTest.php | 1 + tests/lib/Avatar/UserAvatarTest.php | 1 + tests/lib/BackgroundJob/DummyJobList.php | 1 + tests/lib/BackgroundJob/JobTest.php | 1 + tests/lib/BackgroundJob/QueuedJobTest.php | 1 + tests/lib/BackgroundJob/TestJob.php | 1 + .../BackgroundJob/TestParallelAwareJob.php | 1 + tests/lib/BackgroundJob/TimedJobTest.php | 1 + tests/lib/Cache/CappedMemoryCacheTest.php | 1 + tests/lib/Cache/FileCacheTest.php | 1 + tests/lib/Cache/TestCache.php | 3 +- tests/lib/Calendar/ManagerTest.php | 1 + tests/lib/CapabilitiesManagerTest.php | 1 + .../Collaborators/GroupPluginTest.php | 1 + .../Collaborators/LookupPluginTest.php | 1 + .../Collaborators/MailPluginTest.php | 1 + .../Collaborators/RemotePluginTest.php | 1 + .../Collaborators/SearchResultTest.php | 1 + .../Collaborators/SearchTest.php | 1 + .../Collaborators/UserPluginTest.php | 1 + tests/lib/Command/CronBusTest.php | 1 + tests/lib/Command/Integrity/SignAppTest.php | 1 + tests/lib/Command/Integrity/SignCoreTest.php | 1 + tests/lib/Comments/CommentTest.php | 11 +- tests/lib/Comments/FakeFactory.php | 1 + tests/lib/Comments/FakeManager.php | 1 + tests/lib/Config/UserConfigTest.php | 36 +- tests/lib/ConfigTest.php | 25 +- tests/lib/ContactsManagerTest.php | 1 + tests/lib/DB/AdapterTest.php | 1 + tests/lib/DB/ConnectionFactoryTest.php | 1 + tests/lib/DB/MigrationsTest.php | 9 +- tests/lib/DB/OCPostgreSqlPlatformTest.php | 1 + .../QueryBuilder/ExpressionBuilderDBTest.php | 1 + .../DB/QueryBuilder/ExpressionBuilderTest.php | 1 + .../DB/QueryBuilder/FunctionBuilderTest.php | 33 +- .../PartitionedQueryBuilderTest.php | 1 + .../lib/DB/QueryBuilder/QueryBuilderTest.php | 1 + tests/lib/DB/QueryBuilder/QuoteHelperTest.php | 1 + tests/lib/DateTimeFormatterTest.php | 1 + tests/lib/Diagnostics/EventLoggerTest.php | 1 + tests/lib/Diagnostics/QueryLoggerTest.php | 3 +- tests/lib/DirectEditing/ManagerTest.php | 1 + tests/lib/Encryption/DecryptAllTest.php | 1 + .../lib/Encryption/EncryptionWrapperTest.php | 1 + tests/lib/Encryption/ManagerTest.php | 1 + tests/lib/Encryption/UtilTest.php | 1 + tests/lib/EventSourceFactoryTest.php | 1 + tests/lib/Files/AppData/AppDataTest.php | 1 + tests/lib/Files/AppData/FactoryTest.php | 1 + tests/lib/Files/Cache/CacheTest.php | 1 + tests/lib/Files/Cache/HomeCacheTest.php | 1 + .../Files/Cache/MoveFromCacheTraitTest.php | 1 + tests/lib/Files/Cache/PropagatorTest.php | 1 + tests/lib/Files/Cache/ScannerTest.php | 1 + tests/lib/Files/Cache/SearchBuilderTest.php | 1 + tests/lib/Files/Cache/UpdaterLegacyTest.php | 1 + tests/lib/Files/Cache/UpdaterTest.php | 1 + tests/lib/Files/Cache/WatcherTest.php | 1 + .../lib/Files/Cache/Wrapper/CacheJailTest.php | 1 + .../Wrapper/CachePermissionsMaskTest.php | 1 + tests/lib/Files/Config/UserMountCacheTest.php | 1 + tests/lib/Files/EtagTest.php | 1 + tests/lib/Files/FileInfoTest.php | 1 + tests/lib/Files/FilesystemTest.php | 1 + tests/lib/Files/Mount/ManagerTest.php | 1 + tests/lib/Files/Mount/MountPointTest.php | 1 + tests/lib/Files/Mount/MountTest.php | 1 + .../Mount/ObjectHomeMountProviderTest.php | 1 + tests/lib/Files/Node/FileTest.php | 1 + tests/lib/Files/Node/FolderTest.php | 1 + tests/lib/Files/Node/HookConnectorTest.php | 1 + tests/lib/Files/Node/IntegrationTest.php | 1 + tests/lib/Files/Node/NodeTestCase.php | 1 + tests/lib/Files/Node/RootTest.php | 1 + tests/lib/Files/ObjectStore/AzureTest.php | 1 + tests/lib/Files/ObjectStore/LocalTest.php | 1 + tests/lib/Files/ObjectStore/MapperTest.php | 1 + .../ObjectStore/ObjectStoreScannerTest.php | 1 + .../ObjectStore/ObjectStoreStorageTest.php | 1 + ...ObjectStoreStoragesDifferentBucketTest.php | 1 + .../ObjectStoreStoragesSameBucketTest.php | 1 + tests/lib/Files/ObjectStore/S3Test.php | 1 + tests/lib/Files/ObjectStore/SwiftTest.php | 1 + tests/lib/Files/PathVerificationTest.php | 1 + .../Search/QueryOptimizer/CombinedTests.php | 1 + .../QueryOptimizer/FlattenNestedBoolTest.php | 1 + .../MergeDistributiveOperationsTest.php | 1 + .../QueryOptimizer/OrEqualsToInTest.php | 1 + .../Files/Search/SearchIntegrationTest.php | 1 + tests/lib/Files/SimpleFS/SimpleFileTest.php | 1 + tests/lib/Files/SimpleFS/SimpleFolderTest.php | 1 + tests/lib/Files/Storage/CommonTest.php | 1 + tests/lib/Files/Storage/CopyDirectoryTest.php | 1 + tests/lib/Files/Storage/HomeTest.php | 1 + tests/lib/Files/Storage/LocalTest.php | 1 + tests/lib/Files/Storage/Storage.php | 1 + .../lib/Files/Storage/StorageFactoryTest.php | 1 + tests/lib/Files/Storage/StoragesTestCase.php | 1 + .../Storage/Wrapper/AvailabilityTest.php | 1 + .../Files/Storage/Wrapper/EncodingTest.php | 1 + .../Files/Storage/Wrapper/EncryptionTest.php | 1 + tests/lib/Files/Storage/Wrapper/JailTest.php | 1 + .../Files/Storage/Wrapper/KnownMtimeTest.php | 1 + .../Storage/Wrapper/PermissionsMaskTest.php | 1 + tests/lib/Files/Storage/Wrapper/QuotaTest.php | 1 + .../lib/Files/Storage/Wrapper/WrapperTest.php | 1 + .../Files/Stream/DummyEncryptionWrapper.php | 1 + tests/lib/Files/Stream/QuotaTest.php | 1 + tests/lib/Files/Type/DetectionTest.php | 1 + tests/lib/Files/Type/LoaderTest.php | 1 + tests/lib/Files/Utils/ScannerTest.php | 1 + tests/lib/Files/ViewTest.php | 1 + tests/lib/GlobalScale/ConfigTest.php | 1 + tests/lib/Group/Backend.php | 1 + tests/lib/Group/DatabaseTest.php | 1 + tests/lib/Group/Dummy.php | 1 + tests/lib/Group/ManagerTest.php | 48 +- tests/lib/Group/MetaDataTest.php | 1 + tests/lib/HelperStorageTest.php | 1 + tests/lib/HookHelper.php | 1 + tests/lib/Hooks/BasicEmitterTest.php | 1 + .../lib/Http/Client/NegativeDnsCacheTest.php | 2 +- tests/lib/Http/Client/ResponseTest.php | 1 + tests/lib/ImageTest.php | 1 + tests/lib/InfoXmlTest.php | 1 + tests/lib/InstallerTest.php | 1 + tests/lib/IntegrityCheck/CheckerTest.php | 1 + .../IntegrityCheck/Helpers/AppLocatorTest.php | 3 +- .../Helpers/EnvironmentHelperTest.php | 1 + .../Helpers/FileAccessHelperTest.php | 5 +- .../ExcludeFileByNameFilterIteratorTest.php | 1 + tests/lib/L10N/L10nTest.php | 1 + tests/lib/L10N/LanguageIteratorTest.php | 1 + tests/lib/LargeFileHelperGetFileSizeTest.php | 1 + tests/lib/LargeFileHelperTest.php | 3 +- tests/lib/LegacyHelperTest.php | 1 + tests/lib/Lock/DBLockingProviderTest.php | 1 + tests/lib/Lock/LockingProvider.php | 17 +- .../lib/Lock/MemcacheLockingProviderTest.php | 1 + .../Lock/NonCachingDBLockingProviderTest.php | 1 + tests/lib/Lockdown/Filesystem/NoFSTest.php | 1 + .../lib/Lockdown/Filesystem/NullCacheTest.php | 1 + .../Lockdown/Filesystem/NullStorageTest.php | 1 + tests/lib/Lockdown/LockdownManagerTest.php | 1 + tests/lib/Log/FileTest.php | 1 + tests/lib/Log/LogFactoryTest.php | 1 + tests/lib/LoggerTest.php | 1 + tests/lib/Mail/EMailTemplateTest.php | 1 + tests/lib/Mail/MailerTest.php | 1 + tests/lib/Mail/MessageTest.php | 1 + tests/lib/Mail/Provider/AddressTest.php | 4 +- tests/lib/Mail/Provider/AttachmentTest.php | 8 +- tests/lib/Mail/Provider/MessageTest.php | 18 +- tests/lib/Memcache/CasTraitTest.php | 1 + tests/lib/Memcache/FactoryTest.php | 1 + tests/lib/Migration/BackgroundRepairTest.php | 1 + tests/lib/NaturalSortTest.php | 1 + tests/lib/NavigationManagerTest.php | 1 + tests/lib/Notification/ActionTest.php | 1 + tests/lib/OCS/DiscoveryServiceTest.php | 1 + tests/lib/OCS/ProviderTest.php | 1 + tests/lib/Preview/BitmapTest.php | 1 + tests/lib/Preview/GeneratorTest.php | 1 + tests/lib/Preview/HEICTest.php | 1 + tests/lib/Preview/ImageTest.php | 1 + tests/lib/Preview/MP3Test.php | 1 + tests/lib/Preview/MovieTest.php | 1 + tests/lib/Preview/OfficeTest.php | 1 + tests/lib/Preview/SVGTest.php | 1 + tests/lib/Preview/TXTTest.php | 1 + tests/lib/Remote/Api/OCSTest.php | 5 +- tests/lib/Remote/InstanceTest.php | 3 +- tests/lib/Repair/CleanTagsTest.php | 1 + tests/lib/Repair/ClearFrontendCachesTest.php | 1 + .../Repair/ClearGeneratedAvatarCacheTest.php | 1 + .../NC29/SanitizeAccountPropertiesJobTest.php | 2 +- .../Repair/OldGroupMembershipSharesTest.php | 1 + .../CleanPreviewsBackgroundJobTest.php | 1 + .../lib/Repair/Owncloud/CleanPreviewsTest.php | 1 + .../Owncloud/UpdateLanguageCodesTest.php | 1 + tests/lib/Repair/RepairCollationTest.php | 1 + tests/lib/Repair/RepairInvalidSharesTest.php | 1 + tests/lib/Repair/RepairMimeTypesTest.php | 1 + tests/lib/RepairTest.php | 1 + .../lib/RichObjectStrings/DefinitionsTest.php | 1 + tests/lib/Security/CertificateTest.php | 2 +- tests/lib/ServerTest.php | 1 + tests/lib/Session/CryptoSessionDataTest.php | 1 + tests/lib/Session/CryptoWrappingTest.php | 1 + tests/lib/Settings/ManagerTest.php | 1 + tests/lib/Settings/SectionTest.php | 1 + .../CheckServerResponseTraitTest.php | 6 +- tests/lib/SetupTest.php | 1 + tests/lib/Share/Backend.php | 1 + tests/lib/Share/HelperTest.php | 1 + tests/lib/Share/ShareTest.php | 1 + .../lib/Share20/DefaultShareProviderTest.php | 1 + tests/lib/Share20/LegacyHooksTest.php | 1 + tests/lib/Share20/ManagerTest.php | 1 + tests/lib/Share20/ShareHelperTest.php | 1 + tests/lib/Share20/ShareTest.php | 1 + tests/lib/SubAdminTest.php | 1 + tests/lib/TagsTest.php | 7 +- .../lib/TaskProcessing/TaskProcessingTest.php | 1 + tests/lib/Template/CSSResourceLocatorTest.php | 1 + tests/lib/Template/JSCombinerTest.php | 1 + tests/lib/Template/JSResourceLocatorTest.php | 1 + tests/lib/Template/ResourceLocatorTest.php | 1 + tests/lib/TemplateFunctionsTest.php | 1 + tests/lib/TestCase.php | 1 + tests/lib/TestMoveableMountPoint.php | 1 + .../lib/TextProcessing/TextProcessingTest.php | 1 + tests/lib/Traits/ClientServiceTrait.php | 1 + tests/lib/Traits/EncryptionTrait.php | 1 + tests/lib/Traits/MountProviderTrait.php | 1 + tests/lib/Traits/UserTrait.php | 1 + tests/lib/Updater/VersionCheckTest.php | 1 + tests/lib/UpdaterTest.php | 1 + tests/lib/UrlGeneratorTest.php | 1 + tests/lib/User/AvatarUserDummy.php | 1 + tests/lib/User/Backend.php | 1 + tests/lib/User/DatabaseTest.php | 1 + tests/lib/User/Dummy.php | 1 + tests/lib/User/SessionTest.php | 7 +- tests/lib/Util/Group/Dummy.php | 1 + tests/lib/Util/User/Dummy.php | 1 + tests/lib/UtilCheckServerTest.php | 1 + tests/lib/UtilTest.php | 1 + tests/preseed-config.php | 1 + tests/redis-cluster.config.php | 1 + tests/redis.config.php | 1 + tests/startsessionlistener.php | 1 + themes/example/defaults.php | 5 +- 1339 files changed, 3200 insertions(+), 2092 deletions(-) diff --git a/apps/cloud_federation_api/lib/Config.php b/apps/cloud_federation_api/lib/Config.php index f7c14a75c37..23788c26dc9 100644 --- a/apps/cloud_federation_api/lib/Config.php +++ b/apps/cloud_federation_api/lib/Config.php @@ -1,4 +1,5 @@ ['users' => ['celia' => 3, 'darius' => 7, 'faruk' => 5, 'gail' => 5], 'bots' => ['r2-d2' => 8]], 'input' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], ] ], 'expected' => [ - 'users' => - [ - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'elena']], - ], + 'users' => [ + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'elena']], + ], 'bots' => [ ['value' => ['shareWith' => 'r2-d2']], ['value' => ['shareWith' => 'c-3po']], @@ -96,32 +95,30 @@ class CommentersSorterTest extends TestCase { #2 – no commentors, input equals output 'actors' => [], 'input' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], ] ], 'expected' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], diff --git a/apps/dav/appinfo/routes.php b/apps/dav/appinfo/routes.php index 91c1ba58ea2..dba7bcbbdf0 100644 --- a/apps/dav/appinfo/routes.php +++ b/apps/dav/appinfo/routes.php @@ -1,4 +1,5 @@ 'calendar', 'id' => (string)$data['id'], diff --git a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php index 898eb2b5cb6..8c93ddae431 100644 --- a/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php +++ b/apps/dav/lib/CalDAV/Activity/Provider/Calendar.php @@ -1,4 +1,5 @@ VEVENT->DTSTART->getValue() !== $existingBirthday->VEVENT->DTSTART->getValue() || - $newCalendarData->VEVENT->SUMMARY->getValue() !== $existingBirthday->VEVENT->SUMMARY->getValue() + $newCalendarData->VEVENT->DTSTART->getValue() !== $existingBirthday->VEVENT->DTSTART->getValue() + || $newCalendarData->VEVENT->SUMMARY->getValue() !== $existingBirthday->VEVENT->SUMMARY->getValue() ); } diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 1cbf2a1e4eb..27750913105 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -1,4 +1,5 @@ andWhere($innerQuery->expr()->iLike('op.value', - $outerQuery->createNamedParameter('%' . - $this->db->escapeLikeParameter($pattern) . '%'))); + $outerQuery->createNamedParameter('%' + . $this->db->escapeLikeParameter($pattern) . '%'))); } $start = null; diff --git a/apps/dav/lib/CalDAV/Calendar.php b/apps/dav/lib/CalDAV/Calendar.php index 1d88d04a5e3..dd3a4cf3f69 100644 --- a/apps/dav/lib/CalDAV/Calendar.php +++ b/apps/dav/lib/CalDAV/Calendar.php @@ -53,8 +53,8 @@ class Calendar extends \Sabre\CalDAV\Calendar implements IRestorable, IShareable if ($this->getName() === BirthdayService::BIRTHDAY_CALENDAR_URI && strcasecmp($this->calendarInfo['{DAV:}displayname'], 'Contact birthdays') === 0) { $this->calendarInfo['{DAV:}displayname'] = $l10n->t('Contact birthdays'); } - if ($this->getName() === CalDavBackend::PERSONAL_CALENDAR_URI && - $this->calendarInfo['{DAV:}displayname'] === CalDavBackend::PERSONAL_CALENDAR_NAME) { + if ($this->getName() === CalDavBackend::PERSONAL_CALENDAR_URI + && $this->calendarInfo['{DAV:}displayname'] === CalDavBackend::PERSONAL_CALENDAR_NAME) { $this->calendarInfo['{DAV:}displayname'] = $l10n->t('Personal'); } $this->l10n = $l10n; diff --git a/apps/dav/lib/CalDAV/CalendarManager.php b/apps/dav/lib/CalDAV/CalendarManager.php index 1baf53ee457..a2d2f1cda8a 100644 --- a/apps/dav/lib/CalDAV/CalendarManager.php +++ b/apps/dav/lib/CalDAV/CalendarManager.php @@ -1,4 +1,5 @@ principalPrefix === 'principals/calendar-resources' || - $this->principalPrefix === 'principals/calendar-rooms') { + if ($this->principalPrefix === 'principals/calendar-resources' + || $this->principalPrefix === 'principals/calendar-rooms') { $parts = explode('/', $this->principalPrefix); return $parts[1]; diff --git a/apps/dav/lib/CalDAV/EventReader.php b/apps/dav/lib/CalDAV/EventReader.php index 7e337f3108a..b7dd2889956 100644 --- a/apps/dav/lib/CalDAV/EventReader.php +++ b/apps/dav/lib/CalDAV/EventReader.php @@ -169,9 +169,9 @@ class EventReader { if (isset($this->baseEvent->DTEND)) { $this->baseEventEndDate = $this->baseEvent->DTEND->getDateTime($this->baseEventEndTimeZone); $this->baseEventEndDateFloating = $this->baseEvent->DTEND->isFloating(); - $this->baseEventDuration = - $this->baseEvent->DTEND->getDateTime($this->baseEventEndTimeZone)->getTimeStamp() - - $this->baseEventStartDate->getTimeStamp(); + $this->baseEventDuration + = $this->baseEvent->DTEND->getDateTime($this->baseEventEndTimeZone)->getTimeStamp() + - $this->baseEventStartDate->getTimeStamp(); } // evaluate if duration exists // extract duration and calculate end date @@ -362,8 +362,8 @@ class EventReader { public function recurringConcludes(): bool { // retrieve rrule conclusions - if ($this->rruleIterator?->concludesOn() !== null || - $this->rruleIterator?->concludesAfter() !== null) { + if ($this->rruleIterator?->concludesOn() !== null + || $this->rruleIterator?->concludesAfter() !== null) { return true; } // retrieve rdate conclusions diff --git a/apps/dav/lib/CalDAV/Export/ExportService.php b/apps/dav/lib/CalDAV/Export/ExportService.php index 393c53b92e4..552b9e2b675 100644 --- a/apps/dav/lib/CalDAV/Export/ExportService.php +++ b/apps/dav/lib/CalDAV/Export/ExportService.php @@ -18,7 +18,7 @@ use Sabre\VObject\Writer; * Calendar Export Service */ class ExportService { - + public const FORMATS = ['ical', 'jcal', 'xcal']; private string $systemVersion; @@ -92,7 +92,7 @@ class ExportService { default => Writer::write($vobject) }; } - + /** * Generates serialized content for a component in xml format */ diff --git a/apps/dav/lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php b/apps/dav/lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php index 3f71b1db24c..08dc10f7bf4 100644 --- a/apps/dav/lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php +++ b/apps/dav/lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php @@ -1,4 +1,5 @@ backend->removeReminder($reminder['id']); return; } diff --git a/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php b/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php index 236039e4890..68bb3373346 100644 --- a/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php +++ b/apps/dav/lib/CalDAV/ResourceBooking/AbstractPrincipalBackend.php @@ -1,4 +1,5 @@ dbForeignKeyName]] = []; } - $metaDataById[$metaDataRow[$this->dbForeignKeyName]][$metaDataRow['key']] = - $metaDataRow['value']; + $metaDataById[$metaDataRow[$this->dbForeignKeyName]][$metaDataRow['key']] + = $metaDataRow['value']; } while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) { @@ -470,9 +471,9 @@ abstract class AbstractPrincipalBackend implements BackendInterface { * @return bool */ private function isAllowedToAccessResource(array $row, array $userGroups): bool { - if (!isset($row['group_restrictions']) || - $row['group_restrictions'] === null || - $row['group_restrictions'] === '') { + if (!isset($row['group_restrictions']) + || $row['group_restrictions'] === null + || $row['group_restrictions'] === '') { return true; } diff --git a/apps/dav/lib/CalDAV/ResourceBooking/ResourcePrincipalBackend.php b/apps/dav/lib/CalDAV/ResourceBooking/ResourcePrincipalBackend.php index 40396f67ce9..c70d93daf52 100644 --- a/apps/dav/lib/CalDAV/ResourceBooking/ResourcePrincipalBackend.php +++ b/apps/dav/lib/CalDAV/ResourceBooking/ResourcePrincipalBackend.php @@ -1,4 +1,5 @@ recurringInterval(); $startTime = null; @@ -403,7 +403,7 @@ class IMipService { * @return string */ public function generateWhenStringRecurringWeekly(EventReader $er): string { - + // initialize $interval = (int)$er->recurringInterval(); $startTime = null; @@ -456,15 +456,15 @@ class IMipService { * @return string */ public function generateWhenStringRecurringMonthly(EventReader $er): string { - + // initialize $interval = (int)$er->recurringInterval(); $startTime = null; $conclusion = null; // days of month if ($er->recurringPattern() === 'R') { - $days = implode(', ', array_map(function ($value) { return $this->localizeRelativePositionName($value); }, $er->recurringRelativePositionNamed())) . ' ' . - implode(', ', array_map(function ($value) { return $this->localizeDayName($value); }, $er->recurringDaysOfWeekNamed())); + $days = implode(', ', array_map(function ($value) { return $this->localizeRelativePositionName($value); }, $er->recurringRelativePositionNamed())) . ' ' + . implode(', ', array_map(function ($value) { return $this->localizeDayName($value); }, $er->recurringDaysOfWeekNamed())); } else { $days = implode(', ', $er->recurringDaysOfMonth()); } @@ -521,7 +521,7 @@ class IMipService { * @return string */ public function generateWhenStringRecurringYearly(EventReader $er): string { - + // initialize $interval = (int)$er->recurringInterval(); $startTime = null; @@ -530,8 +530,8 @@ class IMipService { $months = implode(', ', array_map(function ($value) { return $this->localizeMonthName($value); }, $er->recurringMonthsOfYearNamed())); // days of month if ($er->recurringPattern() === 'R') { - $days = implode(', ', array_map(function ($value) { return $this->localizeRelativePositionName($value); }, $er->recurringRelativePositionNamed())) . ' ' . - implode(', ', array_map(function ($value) { return $this->localizeDayName($value); }, $er->recurringDaysOfWeekNamed())); + $days = implode(', ', array_map(function ($value) { return $this->localizeRelativePositionName($value); }, $er->recurringRelativePositionNamed())) . ' ' + . implode(', ', array_map(function ($value) { return $this->localizeDayName($value); }, $er->recurringDaysOfWeekNamed())); } else { $days = $er->startDateTime()->format('jS'); } @@ -610,7 +610,7 @@ class IMipService { true => $this->l10n->t('On specific dates between %1$s - %2$s until %3$s', [$startTime, $endTime, $conclusion]), }; } - + /** * generates a occurring next string for a recurring event * @@ -1108,8 +1108,8 @@ class IMipService { $attendee = $iTipMessage->recipient; $organizer = $iTipMessage->sender; $sequence = $iTipMessage->sequence; - $recurrenceId = isset($vevent->{'RECURRENCE-ID'}) ? - $vevent->{'RECURRENCE-ID'}->serialize() : null; + $recurrenceId = isset($vevent->{'RECURRENCE-ID'}) + ? $vevent->{'RECURRENCE-ID'}->serialize() : null; $uid = $vevent->{'UID'}; $query = $this->db->getQueryBuilder(); diff --git a/apps/dav/lib/CalDAV/Schedule/Plugin.php b/apps/dav/lib/CalDAV/Schedule/Plugin.php index da0f9ea5637..a001df8b2a8 100644 --- a/apps/dav/lib/CalDAV/Schedule/Plugin.php +++ b/apps/dav/lib/CalDAV/Schedule/Plugin.php @@ -372,8 +372,8 @@ EOF; return null; } - $isResourceOrRoom = str_starts_with($principalUrl, 'principals/calendar-resources') || - str_starts_with($principalUrl, 'principals/calendar-rooms'); + $isResourceOrRoom = str_starts_with($principalUrl, 'principals/calendar-resources') + || str_starts_with($principalUrl, 'principals/calendar-rooms'); if (str_starts_with($principalUrl, 'principals/users')) { [, $userId] = split($principalUrl); diff --git a/apps/dav/lib/CalDAV/Search/SearchPlugin.php b/apps/dav/lib/CalDAV/Search/SearchPlugin.php index 602ce151e12..27e39a76305 100644 --- a/apps/dav/lib/CalDAV/Search/SearchPlugin.php +++ b/apps/dav/lib/CalDAV/Search/SearchPlugin.php @@ -1,4 +1,5 @@ on('report', [$this, 'report']); - $server->xml->elementMap['{' . self::NS_Nextcloud . '}calendar-search'] = - CalendarSearchReport::class; + $server->xml->elementMap['{' . self::NS_Nextcloud . '}calendar-search'] + = CalendarSearchReport::class; } /** diff --git a/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php index 8a130865842..21a4fff1caf 100644 --- a/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php +++ b/apps/dav/lib/CalDAV/Search/Xml/Filter/CompFilter.php @@ -1,4 +1,5 @@ method = $icalMsg->METHOD = 'CANCEL'; $message->significantChange = true; // clone base event @@ -108,7 +108,7 @@ class TipBroker extends Broker { $event->DTSTAMP = gmdate('Ymd\\THis\\Z'); $event->SEQUENCE = $message->sequence; $icalMsg->add($event); - + } else { // The attendee gets the updated event body $message->method = $icalMsg->METHOD = 'REQUEST'; @@ -124,11 +124,11 @@ class TipBroker extends Broker { $oldAttendeeInstances = array_keys($attendee['oldInstances']); $newAttendeeInstances = array_keys($attendee['newInstances']); - $message->significantChange = - $attendee['forceSend'] === 'REQUEST' || - count($oldAttendeeInstances) !== count($newAttendeeInstances) || - count(array_diff($oldAttendeeInstances, $newAttendeeInstances)) > 0 || - $oldEventInfo['significantChangeHash'] !== $eventInfo['significantChangeHash']; + $message->significantChange + = $attendee['forceSend'] === 'REQUEST' + || count($oldAttendeeInstances) !== count($newAttendeeInstances) + || count(array_diff($oldAttendeeInstances, $newAttendeeInstances)) > 0 + || $oldEventInfo['significantChangeHash'] !== $eventInfo['significantChangeHash']; foreach ($attendee['newInstances'] as $instanceId => $instanceInfo) { $currentEvent = clone $eventInfo['instances'][$instanceId]; diff --git a/apps/dav/lib/Capabilities.php b/apps/dav/lib/Capabilities.php index f321222b285..f9bad25bf31 100644 --- a/apps/dav/lib/Capabilities.php +++ b/apps/dav/lib/Capabilities.php @@ -1,4 +1,5 @@ 'addressbook', 'id' => (string)$data['id'], diff --git a/apps/dav/lib/CardDAV/AddressBook.php b/apps/dav/lib/CardDAV/AddressBook.php index 2ec645f04d2..67c0b7167fa 100644 --- a/apps/dav/lib/CardDAV/AddressBook.php +++ b/apps/dav/lib/CardDAV/AddressBook.php @@ -38,8 +38,8 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable, IMov parent::__construct($carddavBackend, $addressBookInfo); - if ($this->addressBookInfo['{DAV:}displayname'] === CardDavBackend::PERSONAL_ADDRESSBOOK_NAME && - $this->getName() === CardDavBackend::PERSONAL_ADDRESSBOOK_URI) { + if ($this->addressBookInfo['{DAV:}displayname'] === CardDavBackend::PERSONAL_ADDRESSBOOK_NAME + && $this->getName() === CardDavBackend::PERSONAL_ADDRESSBOOK_URI) { $this->addressBookInfo['{DAV:}displayname'] = $l10n->t('Contacts'); } } diff --git a/apps/dav/lib/CardDAV/AddressBookImpl.php b/apps/dav/lib/CardDAV/AddressBookImpl.php index 8657460d0c6..6bb8e24f628 100644 --- a/apps/dav/lib/CardDAV/AddressBookImpl.php +++ b/apps/dav/lib/CardDAV/AddressBookImpl.php @@ -307,8 +307,8 @@ class AddressBookImpl implements IAddressBookEnabled { */ public function isSystemAddressBook(): bool { return $this->addressBookInfo['principaluri'] === 'principals/system/system' && ( - $this->addressBookInfo['uri'] === 'system' || - $this->addressBookInfo['{DAV:}displayname'] === $this->urlGenerator->getBaseUrl() + $this->addressBookInfo['uri'] === 'system' + || $this->addressBookInfo['{DAV:}displayname'] === $this->urlGenerator->getBaseUrl() ); } @@ -324,7 +324,7 @@ class AddressBookImpl implements IAddressBookEnabled { $user = str_replace('principals/users/', '', $this->addressBookInfo['principaluri']); $uri = $this->addressBookInfo['uri']; } - + $path = 'addressbooks/users/' . $user . '/' . $uri; $properties = $this->propertyMapper->findPropertyByPathAndName($user, $path, '{http://owncloud.org/ns}enabled'); if (count($properties) > 0) { diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index d874ca2ce2b..06f6bf9448e 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -159,8 +159,8 @@ class CardDavBackend implements BackendInterface, SyncSupport { // New share can not have more permissions then the old one. continue; } - if (isset($addressBooks[$row['id']][$readOnlyPropertyName]) && - $addressBooks[$row['id']][$readOnlyPropertyName] === 0) { + if (isset($addressBooks[$row['id']][$readOnlyPropertyName]) + && $addressBooks[$row['id']][$readOnlyPropertyName] === 0) { // Old share is already read-write, no more permissions can be gained continue; } diff --git a/apps/dav/lib/CardDAV/PhotoCache.php b/apps/dav/lib/CardDAV/PhotoCache.php index 29f1b0240ef..03c71f7e4a3 100644 --- a/apps/dav/lib/CardDAV/PhotoCache.php +++ b/apps/dav/lib/CardDAV/PhotoCache.php @@ -1,4 +1,5 @@ is not valid. Can not open location for write operation."); } - + foreach ($this->exportService->export($calendar, $options) as $chunk) { fwrite($handle, $chunk); } diff --git a/apps/dav/lib/Command/ListCalendars.php b/apps/dav/lib/Command/ListCalendars.php index 06a1f7397c4..408a7e5247f 100644 --- a/apps/dav/lib/Command/ListCalendars.php +++ b/apps/dav/lib/Command/ListCalendars.php @@ -1,4 +1,5 @@ session->get(self::DAV_AUTHENTICATED)) && - $this->session->get(self::DAV_AUTHENTICATED) === $username; + return !is_null($this->session->get(self::DAV_AUTHENTICATED)) + && $this->session->get(self::DAV_AUTHENTICATED) === $username; } /** @@ -71,8 +71,8 @@ class Auth extends AbstractBasic { * @throws PasswordLoginForbidden */ protected function validateUserPass($username, $password) { - if ($this->userSession->isLoggedIn() && - $this->isDavAuthenticated($this->userSession->getUser()->getUID()) + if ($this->userSession->isLoggedIn() + && $this->isDavAuthenticated($this->userSession->getUser()->getUID()) ) { $this->session->close(); return true; @@ -118,7 +118,7 @@ class Auth extends AbstractBasic { * Checks whether a CSRF check is required on the request */ private function requiresCSRFCheck(): bool { - + $methodsWithoutCsrf = ['GET', 'HEAD', 'OPTIONS']; if (in_array($this->request->getMethod(), $methodsWithoutCsrf)) { return false; @@ -144,8 +144,8 @@ class Auth extends AbstractBasic { } // If logged-in AND DAV authenticated no check is required - if ($this->userSession->isLoggedIn() && - $this->isDavAuthenticated($this->userSession->getUser()->getUID())) { + if ($this->userSession->isLoggedIn() + && $this->isDavAuthenticated($this->userSession->getUser()->getUID())) { return false; } @@ -159,8 +159,8 @@ class Auth extends AbstractBasic { private function auth(RequestInterface $request, ResponseInterface $response): array { $forcedLogout = false; - if (!$this->request->passesCSRFCheck() && - $this->requiresCSRFCheck()) { + if (!$this->request->passesCSRFCheck() + && $this->requiresCSRFCheck()) { // In case of a fail with POST we need to recheck the credentials if ($this->request->getMethod() === 'POST') { $forcedLogout = true; @@ -178,10 +178,10 @@ class Auth extends AbstractBasic { } if ( //Fix for broken webdav clients - ($this->userSession->isLoggedIn() && is_null($this->session->get(self::DAV_AUTHENTICATED))) || + ($this->userSession->isLoggedIn() && is_null($this->session->get(self::DAV_AUTHENTICATED))) //Well behaved clients that only send the cookie are allowed - ($this->userSession->isLoggedIn() && $this->session->get(self::DAV_AUTHENTICATED) === $this->userSession->getUser()->getUID() && empty($request->getHeader('Authorization'))) || - \OC_User::handleApacheAuth() + || ($this->userSession->isLoggedIn() && $this->session->get(self::DAV_AUTHENTICATED) === $this->userSession->getUser()->getUID() && empty($request->getHeader('Authorization'))) + || \OC_User::handleApacheAuth() ) { $user = $this->userSession->getUser()->getUID(); $this->currentUser = $user; diff --git a/apps/dav/lib/Connector/Sabre/BearerAuth.php b/apps/dav/lib/Connector/Sabre/BearerAuth.php index e189d8fa128..23453ae8efb 100644 --- a/apps/dav/lib/Connector/Sabre/BearerAuth.php +++ b/apps/dav/lib/Connector/Sabre/BearerAuth.php @@ -1,4 +1,5 @@ timeout = 1800; $body = $this->server->xml->write('{DAV:}prop', [ - '{DAV:}lockdiscovery' => - new LockDiscovery([$lockInfo]) + '{DAV:}lockdiscovery' + => new LockDiscovery([$lockInfo]) ]); $response->setStatus(Http::STATUS_OK); diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 5364b7cff41..843383a0452 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -257,8 +257,8 @@ class FilesPlugin extends ServerPlugin { // adds a 'Content-Disposition: attachment' header in case no disposition // header has been set before - if ($this->downloadAttachment && - $response->getHeader('Content-Disposition') === null) { + if ($this->downloadAttachment + && $response->getHeader('Content-Disposition') === null) { $filename = $node->getName(); if ($this->request->isUserAgent( [ @@ -541,8 +541,8 @@ class FilesPlugin extends ServerPlugin { $ocmPermissions[] = 'read'; } - if (($ncPermissions & Constants::PERMISSION_CREATE) || - ($ncPermissions & Constants::PERMISSION_UPDATE)) { + if (($ncPermissions & Constants::PERMISSION_CREATE) + || ($ncPermissions & Constants::PERMISSION_UPDATE)) { $ocmPermissions[] = 'write'; } diff --git a/apps/dav/lib/Connector/Sabre/MtimeSanitizer.php b/apps/dav/lib/Connector/Sabre/MtimeSanitizer.php index efed6ce09f8..e18ef58149a 100644 --- a/apps/dav/lib/Connector/Sabre/MtimeSanitizer.php +++ b/apps/dav/lib/Connector/Sabre/MtimeSanitizer.php @@ -1,4 +1,5 @@ getDepth() !== 0 && ( - !is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME)) || - !is_null($propFind->getStatus(self::SHAREES_PROPERTYNAME)) + !is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME)) + || !is_null($propFind->getStatus(self::SHAREES_PROPERTYNAME)) ) ) { $folderNode = $sabreNode->getNode(); diff --git a/apps/dav/lib/Connector/Sabre/TagsPlugin.php b/apps/dav/lib/Connector/Sabre/TagsPlugin.php index 2159adbda31..25c1633df36 100644 --- a/apps/dav/lib/Connector/Sabre/TagsPlugin.php +++ b/apps/dav/lib/Connector/Sabre/TagsPlugin.php @@ -281,8 +281,8 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin { public function handlePreloadProperties(array $nodes, array $requestProperties): void { if ( - !in_array(self::FAVORITE_PROPERTYNAME, $requestProperties, true) && - !in_array(self::TAGS_PROPERTYNAME, $requestProperties, true) + !in_array(self::FAVORITE_PROPERTYNAME, $requestProperties, true) + && !in_array(self::TAGS_PROPERTYNAME, $requestProperties, true) ) { return; } diff --git a/apps/dav/lib/Controller/BirthdayCalendarController.php b/apps/dav/lib/Controller/BirthdayCalendarController.php index d3a9239dd22..f6bfb229a9c 100644 --- a/apps/dav/lib/Controller/BirthdayCalendarController.php +++ b/apps/dav/lib/Controller/BirthdayCalendarController.php @@ -1,4 +1,5 @@ connection->prepare( - 'UPDATE `*PREFIX*properties` SET `propertypath` = ?' . - ' WHERE `userid` = ? AND `propertypath` = ?' + 'UPDATE `*PREFIX*properties` SET `propertypath` = ?' + . ' WHERE `userid` = ? AND `propertypath` = ?' ); $statement->execute([$this->formatPath($destination), $this->user->getUID(), $this->formatPath($source)]); $statement->closeCursor(); diff --git a/apps/dav/lib/DAV/GroupPrincipalBackend.php b/apps/dav/lib/DAV/GroupPrincipalBackend.php index 70a0099330c..77ba45182c9 100644 --- a/apps/dav/lib/DAV/GroupPrincipalBackend.php +++ b/apps/dav/lib/DAV/GroupPrincipalBackend.php @@ -1,4 +1,5 @@ userManager->userExists($principalparts[2])) || - ($principalparts[1] === 'groups' && !$this->groupManager->groupExists($principalparts[2]))) { + if (($principalparts[1] === 'users' && !$this->userManager->userExists($principalparts[2])) + || ($principalparts[1] === 'groups' && !$this->groupManager->groupExists($principalparts[2]))) { // User or group does not exist continue; } @@ -199,7 +199,7 @@ abstract class Backend { public function unshare(IShareable $shareable, string $principalUri): bool { $this->shareCache->clear(); - + $principal = $this->principalBackend->findByUri($principalUri, ''); if (empty($principal)) { return false; diff --git a/apps/dav/lib/Exception/UnsupportedLimitOnInitialSyncException.php b/apps/dav/lib/Exception/UnsupportedLimitOnInitialSyncException.php index 1022625c23b..c6b7f8564c5 100644 --- a/apps/dav/lib/Exception/UnsupportedLimitOnInitialSyncException.php +++ b/apps/dav/lib/Exception/UnsupportedLimitOnInitialSyncException.php @@ -1,4 +1,5 @@ handleSetValue($event); return; } - + } private function handleGetValue(DeclarativeSettingsGetValueEvent $event): void { - + if ($event->getFieldId() === 'system_addressbook_enabled') { $event->setValue((int)$this->config->getValueBool('dav', 'system_addressbook_exposed', true)); } diff --git a/apps/dav/lib/Migration/BuildCalendarSearchIndex.php b/apps/dav/lib/Migration/BuildCalendarSearchIndex.php index b157934a1ff..d8f906f22ee 100644 --- a/apps/dav/lib/Migration/BuildCalendarSearchIndex.php +++ b/apps/dav/lib/Migration/BuildCalendarSearchIndex.php @@ -1,4 +1,5 @@ getUrl(); if ( - $request->hasHeader(self::PAGINATE_HEADER) && - (!$request->hasHeader(self::PAGINATE_TOKEN_HEADER) || !$this->cache->exists($url, $request->getHeader(self::PAGINATE_TOKEN_HEADER))) + $request->hasHeader(self::PAGINATE_HEADER) + && (!$request->hasHeader(self::PAGINATE_TOKEN_HEADER) || !$this->cache->exists($url, $request->getHeader(self::PAGINATE_TOKEN_HEADER))) ) { $pageSize = (int)$request->getHeader(self::PAGINATE_COUNT_HEADER) ?: $this->pageSize; $offset = (int)$request->getHeader(self::PAGINATE_OFFSET_HEADER); @@ -68,9 +68,9 @@ class PaginatePlugin extends ServerPlugin { public function onMethod(RequestInterface $request, ResponseInterface $response) { $url = $this->server->httpRequest->getUrl(); if ( - $request->hasHeader(self::PAGINATE_TOKEN_HEADER) && - $request->hasHeader(self::PAGINATE_OFFSET_HEADER) && - $this->cache->exists($url, $request->getHeader(self::PAGINATE_TOKEN_HEADER)) + $request->hasHeader(self::PAGINATE_TOKEN_HEADER) + && $request->hasHeader(self::PAGINATE_OFFSET_HEADER) + && $this->cache->exists($url, $request->getHeader(self::PAGINATE_TOKEN_HEADER)) ) { $token = $request->getHeader(self::PAGINATE_TOKEN_HEADER); $offset = (int)$request->getHeader(self::PAGINATE_OFFSET_HEADER); diff --git a/apps/dav/lib/Provisioning/Apple/AppleProvisioningNode.php b/apps/dav/lib/Provisioning/Apple/AppleProvisioningNode.php index 190e6584eb1..bb098a0f107 100644 --- a/apps/dav/lib/Provisioning/Apple/AppleProvisioningNode.php +++ b/apps/dav/lib/Provisioning/Apple/AppleProvisioningNode.php @@ -1,4 +1,5 @@ tag->getId() . ' does not exist'); } catch (TagAlreadyExistsException $e) { throw new Conflict( - 'Tag with the properties "' . $name . '", ' . - $userVisible . ', ' . $userAssignable . ' already exists' + 'Tag with the properties "' . $name . '", ' + . $userVisible . ', ' . $userAssignable . ' already exists' ); } } @@ -176,15 +176,15 @@ class SystemTagNode implements \Sabre\DAV\ICollection { public function createFile($name, $data = null) { throw new MethodNotAllowed(); } - + public function createDirectory($name) { throw new MethodNotAllowed(); } - + public function getChild($name) { return new SystemTagObjectType($this->tag, $name, $this->tagManager, $this->tagMapper); } - + public function childExists($name) { $objectTypes = $this->tagMapper->getAvailableObjectTypes(); return in_array($name, $objectTypes); diff --git a/apps/dav/lib/SystemTag/SystemTagObjectType.php b/apps/dav/lib/SystemTag/SystemTagObjectType.php index 0e1368854cd..0d348cd95f4 100644 --- a/apps/dav/lib/SystemTag/SystemTagObjectType.php +++ b/apps/dav/lib/SystemTag/SystemTagObjectType.php @@ -1,4 +1,5 @@ createMock(\Sabre\DAVACL\Plugin::class); - $server = - $this->createMock(Server::class); + $server + = $this->createMock(Server::class); $server->expects($this->any()) ->method('getPlugin') ->willReturnMap([ diff --git a/apps/dav/tests/unit/CalDAV/EventReaderTest.php b/apps/dav/tests/unit/CalDAV/EventReaderTest.php index a5ce3e3f2c2..3bd4f9d85c2 100644 --- a/apps/dav/tests/unit/CalDAV/EventReaderTest.php +++ b/apps/dav/tests/unit/CalDAV/EventReaderTest.php @@ -23,7 +23,7 @@ class EventReaderTest extends TestCase { private VCalendar $vCalendar1e; private VCalendar $vCalendar2; private VCalendar $vCalendar3; - + protected function setUp(): void { parent::setUp(); @@ -151,7 +151,7 @@ class EventReaderTest extends TestCase { 'ROLE' => 'REQ-PARTICIPANT', 'RSVP' => 'TRUE' ]); - + } public function testConstructFromCalendarString(): void { @@ -188,19 +188,19 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1a, $this->vCalendar1a->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T080000', (new DateTimeZone('America/Toronto')))), $er->startDateTime()); - + /** test day part event with different start/end time zone */ // construct event reader $er = new EventReader($this->vCalendar1b, $this->vCalendar1b->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T080000', (new DateTimeZone('America/Toronto')))), $er->startDateTime()); - + /** test day part event with global time zone */ // construct event reader $er = new EventReader($this->vCalendar1c, $this->vCalendar1c->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T080000', (new DateTimeZone('America/Toronto')))), $er->startDateTime()); - + /** test day part event with no time zone */ // construct event reader $er = new EventReader($this->vCalendar1d, $this->vCalendar1d->VEVENT[0]->UID->getValue()); @@ -212,13 +212,13 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1e, $this->vCalendar1e->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T080000', (new DateTimeZone('America/Toronto')))), $er->startDateTime()); - + /** test full day event */ // construct event reader $er = new EventReader($this->vCalendar2, $this->vCalendar2->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T000000', (new DateTimeZone('America/Toronto')))), $er->startDateTime()); - + /** test multi day event */ // construct event reader $er = new EventReader($this->vCalendar3, $this->vCalendar3->VEVENT[0]->UID->getValue()); @@ -234,7 +234,7 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1a, $this->vCalendar1a->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new DateTimeZone('America/Toronto')), $er->startTimeZone()); - + /** test day part event with different start/end time zone */ // construct event reader $er = new EventReader($this->vCalendar1b, $this->vCalendar1b->VEVENT[0]->UID->getValue()); @@ -264,7 +264,7 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar2, $this->vCalendar2->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new DateTimeZone('America/Toronto')), $er->startTimeZone()); - + /** test multi day event */ // construct event reader $er = new EventReader($this->vCalendar3, $this->vCalendar3->VEVENT[0]->UID->getValue()); @@ -280,19 +280,19 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1a, $this->vCalendar1a->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T090000', (new DateTimeZone('America/Toronto')))), $er->endDateTime()); - + /** test day part event with different start/end time zone */ // construct event reader $er = new EventReader($this->vCalendar1b, $this->vCalendar1b->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T090000', (new DateTimeZone('America/Vancouver')))), $er->endDateTime()); - + /** test day part event with global time zone */ // construct event reader $er = new EventReader($this->vCalendar1c, $this->vCalendar1c->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T090000', (new DateTimeZone('America/Toronto')))), $er->endDateTime()); - + /** test day part event with no time zone */ // construct event reader $er = new EventReader($this->vCalendar1d, $this->vCalendar1d->VEVENT[0]->UID->getValue()); @@ -304,13 +304,13 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1e, $this->vCalendar1e->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240701T090000', (new DateTimeZone('America/Toronto')))), $er->endDateTime()); - + /** test full day event */ // construct event reader $er = new EventReader($this->vCalendar2, $this->vCalendar2->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new \DateTime('20240702T000000', (new DateTimeZone('America/Toronto')))), $er->endDateTime()); - + /** test multi day event */ // construct event reader $er = new EventReader($this->vCalendar3, $this->vCalendar3->VEVENT[0]->UID->getValue()); @@ -326,7 +326,7 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar1a, $this->vCalendar1a->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new DateTimeZone('America/Toronto')), $er->endTimeZone()); - + /** test day part event with different start/end time zone */ // construct event reader $er = new EventReader($this->vCalendar1b, $this->vCalendar1b->VEVENT[0]->UID->getValue()); @@ -356,7 +356,7 @@ class EventReaderTest extends TestCase { $er = new EventReader($this->vCalendar2, $this->vCalendar2->VEVENT[0]->UID->getValue()); // test set by constructor $this->assertEquals((new DateTimeZone('America/Toronto')), $er->endTimeZone()); - + /** test multi day event */ // construct event reader $er = new EventReader($this->vCalendar3, $this->vCalendar3->VEVENT[0]->UID->getValue()); diff --git a/apps/dav/tests/unit/CalDAV/Integration/ExternalCalendarTest.php b/apps/dav/tests/unit/CalDAV/Integration/ExternalCalendarTest.php index 67b2ff3555a..5bf247719f7 100644 --- a/apps/dav/tests/unit/CalDAV/Integration/ExternalCalendarTest.php +++ b/apps/dav/tests/unit/CalDAV/Integration/ExternalCalendarTest.php @@ -17,8 +17,8 @@ class ExternalCalendarTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->abstractExternalCalendar = - $this->getMockForAbstractClass(ExternalCalendar::class, ['example-app-id', 'calendar-uri-in-backend']); + $this->abstractExternalCalendar + = $this->getMockForAbstractClass(ExternalCalendar::class, ['example-app-id', 'calendar-uri-in-backend']); } public function testGetName():void { diff --git a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php index c66a3639040..ec2ae37a929 100644 --- a/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php +++ b/apps/dav/tests/unit/CalDAV/Publishing/PublishingTest.php @@ -42,9 +42,9 @@ class PublishingTest extends TestCase { $root = new SimpleCollection('calendars'); $this->server = new Server($root); /** @var SimpleCollection $node */ - $this->book = $this->getMockBuilder(Calendar::class)-> - disableOriginalConstructor()-> - getMock(); + $this->book = $this->getMockBuilder(Calendar::class) + ->disableOriginalConstructor() + ->getMock(); $this->book->method('getName')->willReturn('cal1'); $root->addChild($this->book); $this->plugin->initialize($this->server); diff --git a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php index a7ca6eb8945..02ae504bce0 100644 --- a/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php +++ b/apps/dav/tests/unit/CalDAV/Search/Request/CalendarSearchReportTest.php @@ -13,8 +13,8 @@ use Test\TestCase; class CalendarSearchReportTest extends TestCase { private array $elementMap = [ - '{http://nextcloud.com/ns}calendar-search' => - 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport', + '{http://nextcloud.com/ns}calendar-search' + => 'OCA\\DAV\\CalDAV\\Search\\Xml\\Request\\CalendarSearchReport', ]; public function testFoo(): void { diff --git a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php index 8a279d31b02..735f664a2bb 100644 --- a/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php +++ b/apps/dav/tests/unit/CardDAV/CardDavBackendTest.php @@ -60,36 +60,36 @@ class CardDavBackendTest extends TestCase { public const UNIT_TEST_USER1 = 'principals/users/carddav-unit-test1'; public const UNIT_TEST_GROUP = 'principals/groups/carddav-unit-test-group'; - private $vcardTest0 = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'UID:Test' . PHP_EOL . - 'FN:Test' . PHP_EOL . - 'N:Test;;;;' . PHP_EOL . - 'END:VCARD'; - - private $vcardTest1 = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'UID:Test2' . PHP_EOL . - 'FN:Test2' . PHP_EOL . - 'N:Test2;;;;' . PHP_EOL . - 'END:VCARD'; - - private $vcardTest2 = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'UID:Test3' . PHP_EOL . - 'FN:Test3' . PHP_EOL . - 'N:Test3;;;;' . PHP_EOL . - 'END:VCARD'; - - private $vcardTestNoUID = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'FN:TestNoUID' . PHP_EOL . - 'N:TestNoUID;;;;' . PHP_EOL . - 'END:VCARD'; + private $vcardTest0 = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'UID:Test' . PHP_EOL + . 'FN:Test' . PHP_EOL + . 'N:Test;;;;' . PHP_EOL + . 'END:VCARD'; + + private $vcardTest1 = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'UID:Test2' . PHP_EOL + . 'FN:Test2' . PHP_EOL + . 'N:Test2;;;;' . PHP_EOL + . 'END:VCARD'; + + private $vcardTest2 = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'UID:Test3' . PHP_EOL + . 'FN:Test3' . PHP_EOL + . 'N:Test3;;;;' . PHP_EOL + . 'END:VCARD'; + + private $vcardTestNoUID = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'FN:TestNoUID' . PHP_EOL + . 'N:TestNoUID;;;;' . PHP_EOL + . 'END:VCARD'; protected function setUp(): void { parent::setUp(); diff --git a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php index 381206e336e..d4021a66299 100644 --- a/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php +++ b/apps/dav/tests/unit/Connector/Sabre/CustomPropertiesBackendTest.php @@ -59,8 +59,8 @@ class CustomPropertiesBackendTest extends \Test\TestCase { protected function tearDown(): void { $connection = Server::get(IDBConnection::class); $deleteStatement = $connection->prepare( - 'DELETE FROM `*PREFIX*properties`' . - ' WHERE `userid` = ?' + 'DELETE FROM `*PREFIX*properties`' + . ' WHERE `userid` = ?' ); $deleteStatement->execute( [ diff --git a/apps/dav/tests/unit/DAV/ViewOnlyPluginTest.php b/apps/dav/tests/unit/DAV/ViewOnlyPluginTest.php index 742258f4fc6..ecb71bb7ae7 100644 --- a/apps/dav/tests/unit/DAV/ViewOnlyPluginTest.php +++ b/apps/dav/tests/unit/DAV/ViewOnlyPluginTest.php @@ -156,7 +156,7 @@ class ViewOnlyPluginTest extends TestCase { ->method('getAttribute') ->with('permissions', 'download') ->willReturn($attrEnabled); - + $share->expects($this->once()) ->method('canSeeContent') ->willReturn($allowViewWithoutDownload); diff --git a/apps/dav/tests/unit/Search/ContactsSearchProviderTest.php b/apps/dav/tests/unit/Search/ContactsSearchProviderTest.php index f0e5a5ea354..f4dc13a5c06 100644 --- a/apps/dav/tests/unit/Search/ContactsSearchProviderTest.php +++ b/apps/dav/tests/unit/Search/ContactsSearchProviderTest.php @@ -28,23 +28,23 @@ class ContactsSearchProviderTest extends TestCase { private CardDavBackend&MockObject $backend; private ContactsSearchProvider $provider; - private string $vcardTest0 = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'UID:Test' . PHP_EOL . - 'FN:FN of Test' . PHP_EOL . - 'N:Test;;;;' . PHP_EOL . - 'EMAIL:forrestgump@example.com' . PHP_EOL . - 'END:VCARD'; + private string $vcardTest0 = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'UID:Test' . PHP_EOL + . 'FN:FN of Test' . PHP_EOL + . 'N:Test;;;;' . PHP_EOL + . 'EMAIL:forrestgump@example.com' . PHP_EOL + . 'END:VCARD'; - private string $vcardTest1 = 'BEGIN:VCARD' . PHP_EOL . - 'VERSION:3.0' . PHP_EOL . - 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL . - 'PHOTO;ENCODING=b;TYPE=image/jpeg:' . PHP_EOL . - 'UID:Test2' . PHP_EOL . - 'FN:FN of Test2' . PHP_EOL . - 'N:Test2;;;;' . PHP_EOL . - 'END:VCARD'; + private string $vcardTest1 = 'BEGIN:VCARD' . PHP_EOL + . 'VERSION:3.0' . PHP_EOL + . 'PRODID:-//Sabre//Sabre VObject 4.1.2//EN' . PHP_EOL + . 'PHOTO;ENCODING=b;TYPE=image/jpeg:' . PHP_EOL + . 'UID:Test2' . PHP_EOL + . 'FN:FN of Test2' . PHP_EOL + . 'N:Test2;;;;' . PHP_EOL + . 'END:VCARD'; protected function setUp(): void { parent::setUp(); diff --git a/apps/dav/tests/unit/Search/EventsSearchProviderTest.php b/apps/dav/tests/unit/Search/EventsSearchProviderTest.php index 7c0b74e8ff3..fb8d111ad26 100644 --- a/apps/dav/tests/unit/Search/EventsSearchProviderTest.php +++ b/apps/dav/tests/unit/Search/EventsSearchProviderTest.php @@ -30,184 +30,184 @@ class EventsSearchProviderTest extends TestCase { private EventsSearchProvider $provider; // NO SUMMARY - private static string $vEvent0 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20161004T144433Z' . PHP_EOL . - 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL . - 'DTEND;VALUE=DATE:20161008' . PHP_EOL . - 'TRANSP:TRANSPARENT' . PHP_EOL . - 'DTSTART;VALUE=DATE:20161005' . PHP_EOL . - 'DTSTAMP:20161004T144437Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent0 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20161004T144433Z' . PHP_EOL + . 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL + . 'DTEND;VALUE=DATE:20161008' . PHP_EOL + . 'TRANSP:TRANSPARENT' . PHP_EOL + . 'DTSTART;VALUE=DATE:20161005' . PHP_EOL + . 'DTSTAMP:20161004T144437Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // TIMED SAME DAY - private static string $vEvent1 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Tests//' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VTIMEZONE' . PHP_EOL . - 'TZID:Europe/Berlin' . PHP_EOL . - 'BEGIN:DAYLIGHT' . PHP_EOL . - 'TZOFFSETFROM:+0100' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19810329T020000' . PHP_EOL . - 'TZNAME:GMT+2' . PHP_EOL . - 'TZOFFSETTO:+0200' . PHP_EOL . - 'END:DAYLIGHT' . PHP_EOL . - 'BEGIN:STANDARD' . PHP_EOL . - 'TZOFFSETFROM:+0200' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19961027T030000' . PHP_EOL . - 'TZNAME:GMT+1' . PHP_EOL . - 'TZOFFSETTO:+0100' . PHP_EOL . - 'END:STANDARD' . PHP_EOL . - 'END:VTIMEZONE' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20160809T163629Z' . PHP_EOL . - 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL . - 'DTEND;TZID=Europe/Berlin:20160816T100000' . PHP_EOL . - 'TRANSP:OPAQUE' . PHP_EOL . - 'SUMMARY:Test Europe Berlin' . PHP_EOL . - 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL . - 'DTSTAMP:20160809T163632Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent1 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Tests//' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VTIMEZONE' . PHP_EOL + . 'TZID:Europe/Berlin' . PHP_EOL + . 'BEGIN:DAYLIGHT' . PHP_EOL + . 'TZOFFSETFROM:+0100' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19810329T020000' . PHP_EOL + . 'TZNAME:GMT+2' . PHP_EOL + . 'TZOFFSETTO:+0200' . PHP_EOL + . 'END:DAYLIGHT' . PHP_EOL + . 'BEGIN:STANDARD' . PHP_EOL + . 'TZOFFSETFROM:+0200' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19961027T030000' . PHP_EOL + . 'TZNAME:GMT+1' . PHP_EOL + . 'TZOFFSETTO:+0100' . PHP_EOL + . 'END:STANDARD' . PHP_EOL + . 'END:VTIMEZONE' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20160809T163629Z' . PHP_EOL + . 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL + . 'DTEND;TZID=Europe/Berlin:20160816T100000' . PHP_EOL + . 'TRANSP:OPAQUE' . PHP_EOL + . 'SUMMARY:Test Europe Berlin' . PHP_EOL + . 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL + . 'DTSTAMP:20160809T163632Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // TIMED DIFFERENT DAY - private static string $vEvent2 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Tests//' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VTIMEZONE' . PHP_EOL . - 'TZID:Europe/Berlin' . PHP_EOL . - 'BEGIN:DAYLIGHT' . PHP_EOL . - 'TZOFFSETFROM:+0100' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19810329T020000' . PHP_EOL . - 'TZNAME:GMT+2' . PHP_EOL . - 'TZOFFSETTO:+0200' . PHP_EOL . - 'END:DAYLIGHT' . PHP_EOL . - 'BEGIN:STANDARD' . PHP_EOL . - 'TZOFFSETFROM:+0200' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19961027T030000' . PHP_EOL . - 'TZNAME:GMT+1' . PHP_EOL . - 'TZOFFSETTO:+0100' . PHP_EOL . - 'END:STANDARD' . PHP_EOL . - 'END:VTIMEZONE' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20160809T163629Z' . PHP_EOL . - 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL . - 'DTEND;TZID=Europe/Berlin:20160817T100000' . PHP_EOL . - 'TRANSP:OPAQUE' . PHP_EOL . - 'SUMMARY:Test Europe Berlin' . PHP_EOL . - 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL . - 'DTSTAMP:20160809T163632Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent2 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Tests//' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VTIMEZONE' . PHP_EOL + . 'TZID:Europe/Berlin' . PHP_EOL + . 'BEGIN:DAYLIGHT' . PHP_EOL + . 'TZOFFSETFROM:+0100' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19810329T020000' . PHP_EOL + . 'TZNAME:GMT+2' . PHP_EOL + . 'TZOFFSETTO:+0200' . PHP_EOL + . 'END:DAYLIGHT' . PHP_EOL + . 'BEGIN:STANDARD' . PHP_EOL + . 'TZOFFSETFROM:+0200' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19961027T030000' . PHP_EOL + . 'TZNAME:GMT+1' . PHP_EOL + . 'TZOFFSETTO:+0100' . PHP_EOL + . 'END:STANDARD' . PHP_EOL + . 'END:VTIMEZONE' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20160809T163629Z' . PHP_EOL + . 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL + . 'DTEND;TZID=Europe/Berlin:20160817T100000' . PHP_EOL + . 'TRANSP:OPAQUE' . PHP_EOL + . 'SUMMARY:Test Europe Berlin' . PHP_EOL + . 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL + . 'DTSTAMP:20160809T163632Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // ALL-DAY ONE-DAY - private static string $vEvent3 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20161004T144433Z' . PHP_EOL . - 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL . - 'DTEND;VALUE=DATE:20161006' . PHP_EOL . - 'TRANSP:TRANSPARENT' . PHP_EOL . - 'DTSTART;VALUE=DATE:20161005' . PHP_EOL . - 'DTSTAMP:20161004T144437Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent3 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20161004T144433Z' . PHP_EOL + . 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL + . 'DTEND;VALUE=DATE:20161006' . PHP_EOL + . 'TRANSP:TRANSPARENT' . PHP_EOL + . 'DTSTART;VALUE=DATE:20161005' . PHP_EOL + . 'DTSTAMP:20161004T144437Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // ALL-DAY MULTIPLE DAYS - private static string $vEvent4 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20161004T144433Z' . PHP_EOL . - 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL . - 'DTEND;VALUE=DATE:20161008' . PHP_EOL . - 'TRANSP:TRANSPARENT' . PHP_EOL . - 'DTSTART;VALUE=DATE:20161005' . PHP_EOL . - 'DTSTAMP:20161004T144437Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent4 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20161004T144433Z' . PHP_EOL + . 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL + . 'DTEND;VALUE=DATE:20161008' . PHP_EOL + . 'TRANSP:TRANSPARENT' . PHP_EOL + . 'DTSTART;VALUE=DATE:20161005' . PHP_EOL + . 'DTSTAMP:20161004T144437Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // DURATION - private static string $vEvent5 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20161004T144433Z' . PHP_EOL . - 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL . - 'DURATION:P5D' . PHP_EOL . - 'TRANSP:TRANSPARENT' . PHP_EOL . - 'DTSTART;VALUE=DATE:20161005' . PHP_EOL . - 'DTSTAMP:20161004T144437Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent5 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20161004T144433Z' . PHP_EOL + . 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL + . 'DURATION:P5D' . PHP_EOL + . 'TRANSP:TRANSPARENT' . PHP_EOL + . 'DTSTART;VALUE=DATE:20161005' . PHP_EOL + . 'DTSTAMP:20161004T144437Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // NO DTEND - DATE - private static string $vEvent6 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20161004T144433Z' . PHP_EOL . - 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL . - 'TRANSP:TRANSPARENT' . PHP_EOL . - 'DTSTART;VALUE=DATE:20161005' . PHP_EOL . - 'DTSTAMP:20161004T144437Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent6 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Apple Inc.//Mac OS X 10.11.6//EN' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20161004T144433Z' . PHP_EOL + . 'UID:85560E76-1B0D-47E1-A735-21625767FCA4' . PHP_EOL + . 'TRANSP:TRANSPARENT' . PHP_EOL + . 'DTSTART;VALUE=DATE:20161005' . PHP_EOL + . 'DTSTAMP:20161004T144437Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; // NO DTEND - DATE-TIME - private static string $vEvent7 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'PRODID:-//Tests//' . PHP_EOL . - 'CALSCALE:GREGORIAN' . PHP_EOL . - 'BEGIN:VTIMEZONE' . PHP_EOL . - 'TZID:Europe/Berlin' . PHP_EOL . - 'BEGIN:DAYLIGHT' . PHP_EOL . - 'TZOFFSETFROM:+0100' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19810329T020000' . PHP_EOL . - 'TZNAME:GMT+2' . PHP_EOL . - 'TZOFFSETTO:+0200' . PHP_EOL . - 'END:DAYLIGHT' . PHP_EOL . - 'BEGIN:STANDARD' . PHP_EOL . - 'TZOFFSETFROM:+0200' . PHP_EOL . - 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL . - 'DTSTART:19961027T030000' . PHP_EOL . - 'TZNAME:GMT+1' . PHP_EOL . - 'TZOFFSETTO:+0100' . PHP_EOL . - 'END:STANDARD' . PHP_EOL . - 'END:VTIMEZONE' . PHP_EOL . - 'BEGIN:VEVENT' . PHP_EOL . - 'CREATED:20160809T163629Z' . PHP_EOL . - 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL . - 'TRANSP:OPAQUE' . PHP_EOL . - 'SUMMARY:Test Europe Berlin' . PHP_EOL . - 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL . - 'DTSTAMP:20160809T163632Z' . PHP_EOL . - 'SEQUENCE:0' . PHP_EOL . - 'END:VEVENT' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vEvent7 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'PRODID:-//Tests//' . PHP_EOL + . 'CALSCALE:GREGORIAN' . PHP_EOL + . 'BEGIN:VTIMEZONE' . PHP_EOL + . 'TZID:Europe/Berlin' . PHP_EOL + . 'BEGIN:DAYLIGHT' . PHP_EOL + . 'TZOFFSETFROM:+0100' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19810329T020000' . PHP_EOL + . 'TZNAME:GMT+2' . PHP_EOL + . 'TZOFFSETTO:+0200' . PHP_EOL + . 'END:DAYLIGHT' . PHP_EOL + . 'BEGIN:STANDARD' . PHP_EOL + . 'TZOFFSETFROM:+0200' . PHP_EOL + . 'RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU' . PHP_EOL + . 'DTSTART:19961027T030000' . PHP_EOL + . 'TZNAME:GMT+1' . PHP_EOL + . 'TZOFFSETTO:+0100' . PHP_EOL + . 'END:STANDARD' . PHP_EOL + . 'END:VTIMEZONE' . PHP_EOL + . 'BEGIN:VEVENT' . PHP_EOL + . 'CREATED:20160809T163629Z' . PHP_EOL + . 'UID:0AD16F58-01B3-463B-A215-FD09FC729A02' . PHP_EOL + . 'TRANSP:OPAQUE' . PHP_EOL + . 'SUMMARY:Test Europe Berlin' . PHP_EOL + . 'DTSTART;TZID=Europe/Berlin:20160816T090000' . PHP_EOL + . 'DTSTAMP:20160809T163632Z' . PHP_EOL + . 'SEQUENCE:0' . PHP_EOL + . 'END:VEVENT' . PHP_EOL + . 'END:VCALENDAR'; protected function setUp(): void { parent::setUp(); diff --git a/apps/dav/tests/unit/Search/TasksSearchProviderTest.php b/apps/dav/tests/unit/Search/TasksSearchProviderTest.php index bd242080547..972db0b98ba 100644 --- a/apps/dav/tests/unit/Search/TasksSearchProviderTest.php +++ b/apps/dav/tests/unit/Search/TasksSearchProviderTest.php @@ -29,68 +29,68 @@ class TasksSearchProviderTest extends TestCase { private TasksSearchProvider $provider; // NO DUE NOR COMPLETED NOR SUMMARY - private static string $vTodo0 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'PRODID:TEST' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'BEGIN:VTODO' . PHP_EOL . - 'UID:20070313T123432Z-456553@example.com' . PHP_EOL . - 'DTSTAMP:20070313T123432Z' . PHP_EOL . - 'STATUS:NEEDS-ACTION' . PHP_EOL . - 'END:VTODO' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vTodo0 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'PRODID:TEST' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'BEGIN:VTODO' . PHP_EOL + . 'UID:20070313T123432Z-456553@example.com' . PHP_EOL + . 'DTSTAMP:20070313T123432Z' . PHP_EOL + . 'STATUS:NEEDS-ACTION' . PHP_EOL + . 'END:VTODO' . PHP_EOL + . 'END:VCALENDAR'; // DUE AND COMPLETED - private static string $vTodo1 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'PRODID:TEST' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'BEGIN:VTODO' . PHP_EOL . - 'UID:20070313T123432Z-456553@example.com' . PHP_EOL . - 'DTSTAMP:20070313T123432Z' . PHP_EOL . - 'COMPLETED:20070707T100000Z' . PHP_EOL . - 'DUE;VALUE=DATE:20070501' . PHP_EOL . - 'SUMMARY:Task title' . PHP_EOL . - 'STATUS:NEEDS-ACTION' . PHP_EOL . - 'END:VTODO' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vTodo1 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'PRODID:TEST' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'BEGIN:VTODO' . PHP_EOL + . 'UID:20070313T123432Z-456553@example.com' . PHP_EOL + . 'DTSTAMP:20070313T123432Z' . PHP_EOL + . 'COMPLETED:20070707T100000Z' . PHP_EOL + . 'DUE;VALUE=DATE:20070501' . PHP_EOL + . 'SUMMARY:Task title' . PHP_EOL + . 'STATUS:NEEDS-ACTION' . PHP_EOL + . 'END:VTODO' . PHP_EOL + . 'END:VCALENDAR'; // COMPLETED ONLY - private static string $vTodo2 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'PRODID:TEST' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'BEGIN:VTODO' . PHP_EOL . - 'UID:20070313T123432Z-456553@example.com' . PHP_EOL . - 'DTSTAMP:20070313T123432Z' . PHP_EOL . - 'COMPLETED:20070707T100000Z' . PHP_EOL . - 'SUMMARY:Task title' . PHP_EOL . - 'STATUS:NEEDS-ACTION' . PHP_EOL . - 'END:VTODO' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vTodo2 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'PRODID:TEST' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'BEGIN:VTODO' . PHP_EOL + . 'UID:20070313T123432Z-456553@example.com' . PHP_EOL + . 'DTSTAMP:20070313T123432Z' . PHP_EOL + . 'COMPLETED:20070707T100000Z' . PHP_EOL + . 'SUMMARY:Task title' . PHP_EOL + . 'STATUS:NEEDS-ACTION' . PHP_EOL + . 'END:VTODO' . PHP_EOL + . 'END:VCALENDAR'; // DUE DATE - private static string $vTodo3 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'PRODID:TEST' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'BEGIN:VTODO' . PHP_EOL . - 'UID:20070313T123432Z-456553@example.com' . PHP_EOL . - 'DTSTAMP:20070313T123432Z' . PHP_EOL . - 'DUE;VALUE=DATE:20070501' . PHP_EOL . - 'SUMMARY:Task title' . PHP_EOL . - 'STATUS:NEEDS-ACTION' . PHP_EOL . - 'END:VTODO' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vTodo3 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'PRODID:TEST' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'BEGIN:VTODO' . PHP_EOL + . 'UID:20070313T123432Z-456553@example.com' . PHP_EOL + . 'DTSTAMP:20070313T123432Z' . PHP_EOL + . 'DUE;VALUE=DATE:20070501' . PHP_EOL + . 'SUMMARY:Task title' . PHP_EOL + . 'STATUS:NEEDS-ACTION' . PHP_EOL + . 'END:VTODO' . PHP_EOL + . 'END:VCALENDAR'; // DUE DATETIME - private static string $vTodo4 = 'BEGIN:VCALENDAR' . PHP_EOL . - 'PRODID:TEST' . PHP_EOL . - 'VERSION:2.0' . PHP_EOL . - 'BEGIN:VTODO' . PHP_EOL . - 'UID:20070313T123432Z-456553@example.com' . PHP_EOL . - 'DTSTAMP:20070313T123432Z' . PHP_EOL . - 'DUE:20070709T130000Z' . PHP_EOL . - 'SUMMARY:Task title' . PHP_EOL . - 'STATUS:NEEDS-ACTION' . PHP_EOL . - 'END:VTODO' . PHP_EOL . - 'END:VCALENDAR'; + private static string $vTodo4 = 'BEGIN:VCALENDAR' . PHP_EOL + . 'PRODID:TEST' . PHP_EOL + . 'VERSION:2.0' . PHP_EOL + . 'BEGIN:VTODO' . PHP_EOL + . 'UID:20070313T123432Z-456553@example.com' . PHP_EOL + . 'DTSTAMP:20070313T123432Z' . PHP_EOL + . 'DUE:20070709T130000Z' . PHP_EOL + . 'SUMMARY:Task title' . PHP_EOL + . 'STATUS:NEEDS-ACTION' . PHP_EOL + . 'END:VTODO' . PHP_EOL + . 'END:VCALENDAR'; protected function setUp(): void { parent::setUp(); diff --git a/apps/encryption/lib/Command/DisableMasterKey.php b/apps/encryption/lib/Command/DisableMasterKey.php index 1912d09728d..0b8b8e39e78 100644 --- a/apps/encryption/lib/Command/DisableMasterKey.php +++ b/apps/encryption/lib/Command/DisableMasterKey.php @@ -1,4 +1,5 @@ getDisplayName() . - '" is not able to read ' . $path; + $msg = 'Encryption module "' . $this->getDisplayName() + . '" is not able to read ' . $path; $hint = $this->l->t('Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you.'); $this->logger->warning($msg); throw new DecryptionFailedException($msg, $hint); diff --git a/apps/encryption/lib/KeyManager.php b/apps/encryption/lib/KeyManager.php index f694e6550f1..f9c1ef94634 100644 --- a/apps/encryption/lib/KeyManager.php +++ b/apps/encryption/lib/KeyManager.php @@ -211,8 +211,8 @@ class KeyManager { */ public function setRecoveryKey($password, $keyPair) { // Save Public Key - $this->keyStorage->setSystemUserKey($this->getRecoveryKeyId() . - '.' . $this->publicKeyId, + $this->keyStorage->setSystemUserKey($this->getRecoveryKeyId() + . '.' . $this->publicKeyId, $keyPair['publicKey'], Encryption::ID); @@ -633,8 +633,8 @@ class KeyManager { $publicKeys[$this->getPublicShareKeyId()] = $publicShareKey; } - if ($this->recoveryKeyExists() && - $this->util->isRecoveryEnabledForUser($uid)) { + if ($this->recoveryKeyExists() + && $this->util->isRecoveryEnabledForUser($uid)) { $publicKeys[$this->getRecoveryKeyId()] = $this->getRecoveryKey(); } diff --git a/apps/encryption/lib/Migration/SetMasterKeyStatus.php b/apps/encryption/lib/Migration/SetMasterKeyStatus.php index 96194351296..5f98308de89 100644 --- a/apps/encryption/lib/Migration/SetMasterKeyStatus.php +++ b/apps/encryption/lib/Migration/SetMasterKeyStatus.php @@ -1,4 +1,5 @@ 1) { $owner = $parts[1]; if ($this->userManager->userExists($owner) === false) { - throw new \BadMethodCallException('Unknown user: ' . - 'method expects path to a user folder relative to the data folder'); + throw new \BadMethodCallException('Unknown user: ' + . 'method expects path to a user folder relative to the data folder'); } } diff --git a/apps/federatedfilesharing/appinfo/routes.php b/apps/federatedfilesharing/appinfo/routes.php index 93becd2517b..a7e135548c7 100644 --- a/apps/federatedfilesharing/appinfo/routes.php +++ b/apps/federatedfilesharing/appinfo/routes.php @@ -1,4 +1,5 @@ getPassword(); - $authenticated = $this->session->get(PublicAuth::DAV_AUTHENTICATED) === $share->getId() || - $this->shareManager->checkPassword($share, $password); + $authenticated = $this->session->get(PublicAuth::DAV_AUTHENTICATED) === $share->getId() + || $this->shareManager->checkPassword($share, $password); if (!empty($storedPassword) && !$authenticated) { $response = new JSONResponse( ['message' => 'No permission to access the share'], @@ -151,12 +152,11 @@ class MountPublicLinkController extends Controller { try { $response = $httpClient->post($remote . '/index.php/apps/federatedfilesharing/createFederatedShare', [ - 'body' => - [ - 'token' => $token, - 'shareWith' => rtrim($cloudId->getId(), '/'), - 'password' => $password - ], + 'body' => [ + 'token' => $token, + 'shareWith' => rtrim($cloudId->getId(), '/'), + 'password' => $password + ], 'connect_timeout' => 10, ] ); diff --git a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php index 90e7f53da80..7fdd718cbfe 100644 --- a/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php +++ b/apps/federatedfilesharing/lib/Controller/RequestHandlerController.php @@ -145,9 +145,9 @@ class RequestHandlerController extends OCSController { #[NoCSRFRequired] #[PublicPage] public function reShare(int $id, ?string $token = null, ?string $shareWith = null, ?int $remoteId = 0) { - if ($token === null || - $shareWith === null || - $remoteId === null + if ($token === null + || $shareWith === null + || $remoteId === null ) { throw new OCSBadRequestException(); } @@ -370,8 +370,8 @@ class RequestHandlerController extends OCSController { $ocmPermissions[] = 'read'; } - if (($ncPermissions & Constants::PERMISSION_CREATE) || - ($ncPermissions & Constants::PERMISSION_UPDATE)) { + if (($ncPermissions & Constants::PERMISSION_CREATE) + || ($ncPermissions & Constants::PERMISSION_UPDATE)) { $ocmPermissions[] = 'write'; } diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index 7c95b83a5dd..e3731ac3ecf 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -88,8 +88,8 @@ class FederatedShareProvider implements IShareProvider, IShareProviderSupportsAl $shareType = $share->getShareType(); $expirationDate = $share->getExpirationDate(); - if ($shareType === IShare::TYPE_REMOTE_GROUP && - !$this->isOutgoingServer2serverGroupShareEnabled() + if ($shareType === IShare::TYPE_REMOTE_GROUP + && !$this->isOutgoingServer2serverGroupShareEnabled() ) { $message = 'It is not allowed to send federated group shares from this server.'; $message_t = $this->l->t('It is not allowed to send federated group shares from this server.'); diff --git a/apps/federatedfilesharing/lib/Notifications.php b/apps/federatedfilesharing/lib/Notifications.php index 3ba88dad016..613c05613ef 100644 --- a/apps/federatedfilesharing/lib/Notifications.php +++ b/apps/federatedfilesharing/lib/Notifications.php @@ -242,10 +242,10 @@ class Notifications { $result = $this->tryHttpPostToShareEndpoint(rtrim($remote, '/'), '/' . $remoteId . '/' . $action, $fields, $action); $status = json_decode($result['result'], true); - if ($result['success'] && - isset($status['ocs']['meta']['statuscode']) && - ($status['ocs']['meta']['statuscode'] === 100 || - $status['ocs']['meta']['statuscode'] === 200 + if ($result['success'] + && isset($status['ocs']['meta']['statuscode']) + && ($status['ocs']['meta']['statuscode'] === 100 + || $status['ocs']['meta']['statuscode'] === 200 ) ) { return true; diff --git a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php index 836b6610199..1cdcdbdd6d4 100644 --- a/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php +++ b/apps/federatedfilesharing/lib/OCM/CloudFederationProviderFiles.php @@ -1,4 +1,5 @@ getShareType() === IShare::TYPE_REMOTE && - $share->getToken() === $token + $share->getShareType() === IShare::TYPE_REMOTE + && $share->getToken() === $token ) { return true; } diff --git a/apps/federatedfilesharing/lib/Settings/Admin.php b/apps/federatedfilesharing/lib/Settings/Admin.php index e21c34638ad..fc685f952c7 100644 --- a/apps/federatedfilesharing/lib/Settings/Admin.php +++ b/apps/federatedfilesharing/lib/Settings/Admin.php @@ -1,4 +1,5 @@ federatedShareProvider->isIncomingServer2serverShareEnabled() || - $this->federatedShareProvider->isIncomingServer2serverGroupShareEnabled()) { + if ($this->federatedShareProvider->isIncomingServer2serverShareEnabled() + || $this->federatedShareProvider->isIncomingServer2serverGroupShareEnabled()) { return 'sharing'; } return null; diff --git a/apps/federatedfilesharing/lib/Settings/PersonalSection.php b/apps/federatedfilesharing/lib/Settings/PersonalSection.php index 5ef1e180c31..eea10e39393 100644 --- a/apps/federatedfilesharing/lib/Settings/PersonalSection.php +++ b/apps/federatedfilesharing/lib/Settings/PersonalSection.php @@ -1,4 +1,5 @@ httpClient->get( $url, [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, 'verify' => !$this->config->getSystemValue('sharing.federation.allowSelfSignedCertificates', false), diff --git a/apps/federation/lib/Settings/Admin.php b/apps/federation/lib/Settings/Admin.php index f9630c4b557..5cf5346bb85 100644 --- a/apps/federation/lib/Settings/Admin.php +++ b/apps/federation/lib/Settings/Admin.php @@ -1,4 +1,5 @@ t('External documentation for Federated Cloud Sharing' diff --git a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php index 7ac68d618a1..017a33b4941 100644 --- a/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/GetSharedSecretTest.php @@ -155,12 +155,11 @@ class GetSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/shared-secret', [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, 'verify' => true, @@ -247,12 +246,11 @@ class GetSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/shared-secret', [ - 'query' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'query' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, 'verify' => true, diff --git a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php index 8bec10c11e1..8aa83df0b0d 100644 --- a/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php +++ b/apps/federation/tests/BackgroundJob/RequestSharedSecretTest.php @@ -145,12 +145,11 @@ class RequestSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/request-shared-secret', [ - 'body' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'body' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, 'verify' => true, @@ -231,12 +230,11 @@ class RequestSharedSecretTest extends TestCase { ->with( $target . '/ocs/v2.php/apps/federation/api/v1/request-shared-secret', [ - 'body' => - [ - 'url' => $source, - 'token' => $token, - 'format' => 'json', - ], + 'body' => [ + 'url' => $source, + 'token' => $token, + 'format' => 'json', + ], 'timeout' => 3, 'connect_timeout' => 3, 'verify' => true, diff --git a/apps/federation/tests/SyncFederationAddressbooksTest.php b/apps/federation/tests/SyncFederationAddressbooksTest.php index aebd4aa2b93..8b075204859 100644 --- a/apps/federation/tests/SyncFederationAddressbooksTest.php +++ b/apps/federation/tests/SyncFederationAddressbooksTest.php @@ -35,14 +35,14 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { $dbHandler->method('getAllServer') ->willReturn([ [ - 'url' => 'https://cloud.drop.box', + 'url' => 'https://cloud.example.org', 'url_hash' => 'sha1', - 'shared_secret' => 'iloveowncloud', + 'shared_secret' => 'ilovenextcloud', 'sync_token' => '0' ] ]); - $dbHandler->expects($this->once())->method('setServerStatus')-> - with('https://cloud.drop.box', 1, '1'); + $dbHandler->expects($this->once())->method('setServerStatus') + ->with('https://cloud.example.org', 1, '1'); $syncService = $this->createMock(SyncService::class); $syncService->expects($this->once())->method('syncRemoteAddressBook') ->willReturn('1'); @@ -58,15 +58,15 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { public function testException(): void { /** @var DbHandler&MockObject $dbHandler */ $dbHandler = $this->createMock(DbHandler::class); - $dbHandler->method('getAllServer')-> - willReturn([ - [ - 'url' => 'https://cloud.drop.box', - 'url_hash' => 'sha1', - 'shared_secret' => 'iloveowncloud', - 'sync_token' => '0' - ] - ]); + $dbHandler->method('getAllServer') + ->willReturn([ + [ + 'url' => 'https://cloud.example.org', + 'url_hash' => 'sha1', + 'shared_secret' => 'ilovenextcloud', + 'sync_token' => '0' + ] + ]); $syncService = $this->createMock(SyncService::class); $syncService->expects($this->once())->method('syncRemoteAddressBook') ->willThrowException(new \Exception('something did not work out')); @@ -85,15 +85,15 @@ class SyncFederationAddressbooksTest extends \Test\TestCase { $dbHandler->method('getAllServer') ->willReturn([ [ - 'url' => 'https://cloud.drop.box', + 'url' => 'https://cloud.example.org', 'url_hash' => 'sha1', 'shared_secret' => 'ilovenextcloud', 'sync_token' => '0' ] ]); $dbHandler->method('getServerStatus')->willReturn(TrustedServers::STATUS_FAILURE); - $dbHandler->expects($this->once())->method('setServerStatus')-> - with('https://cloud.drop.box', 1); + $dbHandler->expects($this->once())->method('setServerStatus') + ->with('https://cloud.example.org', 1); $syncService = $this->createMock(SyncService::class); $syncService->expects($this->once())->method('syncRemoteAddressBook') ->willReturn('0'); diff --git a/apps/files/lib/Activity/FavoriteProvider.php b/apps/files/lib/Activity/FavoriteProvider.php index 7a660287192..e56b13b902a 100644 --- a/apps/files/lib/Activity/FavoriteProvider.php +++ b/apps/files/lib/Activity/FavoriteProvider.php @@ -1,4 +1,5 @@ cleanupOrphanedMounts(); $output->writeln("$deletedMounts orphaned mount entries deleted"); - + return self::SUCCESS; } @@ -112,7 +112,7 @@ class DeleteOrphanedFiles extends Command { return $deletedEntries; } - + /** * @param array $fileIdsByStorage * @return int diff --git a/apps/files/lib/Command/SanitizeFilenames.php b/apps/files/lib/Command/SanitizeFilenames.php index a06b820ee6c..88d41d1cb5e 100644 --- a/apps/files/lib/Command/SanitizeFilenames.php +++ b/apps/files/lib/Command/SanitizeFilenames.php @@ -62,7 +62,7 @@ class SanitizeFilenames extends Base { mode: InputOption::VALUE_REQUIRED, description: 'Replacement for invalid character (by default space, underscore or dash is used)', ); - + } protected function execute(InputInterface $input, OutputInterface $output): int { diff --git a/apps/files/lib/Command/Scan.php b/apps/files/lib/Command/Scan.php index bd99dd28e60..b9057139b0e 100644 --- a/apps/files/lib/Command/Scan.php +++ b/apps/files/lib/Command/Scan.php @@ -286,8 +286,8 @@ class Scan extends Base { $this->execTime = -microtime(true); // Convert PHP errors to exceptions set_error_handler( - fn (int $severity, string $message, string $file, int $line): bool => - $this->exceptionErrorHandler($output, $severity, $message, $file, $line), + fn (int $severity, string $message, string $file, int $line): bool + => $this->exceptionErrorHandler($output, $severity, $message, $file, $line), E_ALL ); } diff --git a/apps/files/lib/Command/ScanAppData.php b/apps/files/lib/Command/ScanAppData.php index 81c80cab373..0e08c6a8cfe 100644 --- a/apps/files/lib/Command/ScanAppData.php +++ b/apps/files/lib/Command/ScanAppData.php @@ -1,4 +1,5 @@ getMountPoint(); // only analyze into folders from main storage, if ( - $mount->getMountProvider() instanceof IHomeMountProvider || - ($includeExternalStorage && $mount->getMountProvider() instanceof ConfigAdapter) + $mount->getMountProvider() instanceof IHomeMountProvider + || ($includeExternalStorage && $mount->getMountProvider() instanceof ConfigAdapter) ) { if ($fileInfo->isEncrypted()) { /* Encrypted folder means e2ee encrypted, we cannot transfer it */ @@ -492,8 +492,8 @@ class OwnershipTransferService { foreach ($shares as ['share' => $share, 'suffix' => $suffix]) { try { $output->writeln('Transfering share ' . $share->getId() . ' of type ' . $share->getShareType(), OutputInterface::VERBOSITY_VERBOSE); - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === $destinationUid) { + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === $destinationUid) { // Unmount the shares before deleting, so we don't try to get the storage later on. $shareMountPoint = $this->mountManager->find('/' . $destinationUid . '/files' . $share->getTarget()); if ($shareMountPoint) { @@ -508,8 +508,8 @@ class OwnershipTransferService { $share->setSharedBy($destinationUid); } - if ($share->getShareType() === IShare::TYPE_USER && - !$this->userManager->userExists($share->getSharedWith())) { + if ($share->getShareType() === IShare::TYPE_USER + && !$this->userManager->userExists($share->getSharedWith())) { // stray share with deleted user $output->writeln('Share with id ' . $share->getId() . ' points at deleted user "' . $share->getSharedWith() . '", deleting'); $this->shareManager->deleteShare($share); @@ -574,8 +574,8 @@ class OwnershipTransferService { } $shareTarget = $share->getTarget(); $shareTarget = $finalShareTarget . $shareTarget; - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedBy() === $destinationUid) { + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedBy() === $destinationUid) { $this->shareManager->deleteShare($share); } elseif (isset($destinationShares[$share->getNodeId()])) { $destinationShare = $destinationShares[$share->getNodeId()]; diff --git a/apps/files/lib/Service/UserConfig.php b/apps/files/lib/Service/UserConfig.php index a2f2f1c1d14..dee89b990c6 100644 --- a/apps/files/lib/Service/UserConfig.php +++ b/apps/files/lib/Service/UserConfig.php @@ -1,4 +1,5 @@ getAllowedConfigKeys())) { throw new \InvalidArgumentException('Unknown config key'); } - + if (!in_array($value, $this->getAllowedConfigValues($key)) && !empty($this->getAllowedConfigValues($key))) { throw new \InvalidArgumentException('Invalid config value'); @@ -132,7 +133,7 @@ class ViewConfig { $userId = $this->user->getUID(); $configs = json_decode($this->config->getUserValue($userId, Application::APP_ID, self::CONFIG_KEY, '[]'), true); - + if (!isset($configs[$view])) { $configs[$view] = []; } @@ -158,7 +159,7 @@ class ViewConfig { $userId = $this->user->getUID(); $configs = json_decode($this->config->getUserValue($userId, Application::APP_ID, self::CONFIG_KEY, '[]'), true); $views = array_keys($configs); - + return array_reduce($views, function ($carry, $view) use ($configs) { $carry[$view] = $this->getConfig($view); return $carry; diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php index 9ba105e240d..5281220282a 100644 --- a/apps/files/templates/index.php +++ b/apps/files/templates/index.php @@ -1,4 +1,5 @@ getMountPoint() === $mount->getMountPoint() && - $existingMount->getApplicableGroups() === $mount->getApplicableGroups() && - $existingMount->getApplicableUsers() === $mount->getApplicableUsers() && - $existingMount->getBackendOptions() === $mount->getBackendOptions() + $existingMount->getMountPoint() === $mount->getMountPoint() + && $existingMount->getApplicableGroups() === $mount->getApplicableGroups() + && $existingMount->getApplicableUsers() === $mount->getApplicableUsers() + && $existingMount->getBackendOptions() === $mount->getBackendOptions() ) { $output->writeln('Duplicate mount (' . $mount->getMountPoint() . ')'); return self::FAILURE; diff --git a/apps/files_external/lib/Command/ListCommand.php b/apps/files_external/lib/Command/ListCommand.php index 84c1b569e9d..350916b6c2c 100644 --- a/apps/files_external/lib/Command/ListCommand.php +++ b/apps/files_external/lib/Command/ListCommand.php @@ -1,4 +1,5 @@ userMountingAllowed && - array_intersect($backend->getIdentifierAliases(), $this->userMountingBackends) + if ($this->userMountingAllowed + && array_intersect($backend->getIdentifierAliases(), $this->userMountingBackends) ) { return true; } diff --git a/apps/files_external/lib/Service/DBConfigService.php b/apps/files_external/lib/Service/DBConfigService.php index 3820f6b0d96..41ec4512d70 100644 --- a/apps/files_external/lib/Service/DBConfigService.php +++ b/apps/files_external/lib/Service/DBConfigService.php @@ -1,4 +1,5 @@ getParsedParameters($event); - if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || - $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { + if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED + || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { $subject = $this->l->t('Downloaded via public link'); - } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || - $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { + } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED + || $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { $subject = $this->l->t('Downloaded by {email}'); } else { throw new \InvalidArgumentException(); @@ -53,8 +54,8 @@ class Downloads extends Base { public function parseLongVersion(IEvent $event, ?IEvent $previousEvent = null) { $parsedParameters = $this->getParsedParameters($event); - if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED || - $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { + if ($event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED + || $event->getSubject() === self::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED) { if (!isset($parsedParameters['remote-address-hash']['type'])) { $subject = $this->l->t('{file} downloaded via public link'); $this->setSubjects($event, $subject, $parsedParameters); @@ -63,8 +64,8 @@ class Downloads extends Base { $this->setSubjects($event, $subject, $parsedParameters); $event = $this->eventMerger->mergeEvents('file', $event, $previousEvent); } - } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED || - $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { + } elseif ($event->getSubject() === self::SUBJECT_SHARED_FILE_BY_EMAIL_DOWNLOADED + || $event->getSubject() === self::SUBJECT_SHARED_FOLDER_BY_EMAIL_DOWNLOADED) { $subject = $this->l->t('{email} downloaded {file}'); $this->setSubjects($event, $subject, $parsedParameters); } else { diff --git a/apps/files_sharing/lib/Activity/Providers/Groups.php b/apps/files_sharing/lib/Activity/Providers/Groups.php index b64104739db..d0086c05ced 100644 --- a/apps/files_sharing/lib/Activity/Providers/Groups.php +++ b/apps/files_sharing/lib/Activity/Providers/Groups.php @@ -1,4 +1,5 @@ l->t('Wrong or no update parameter given')); } @@ -1563,8 +1563,8 @@ class ShareAPIController extends OCSController { // The owner of the file and the creator of the share // can always edit the share - if ($share->getShareOwner() === $this->userId || - $share->getSharedBy() === $this->userId + if ($share->getShareOwner() === $this->userId + || $share->getSharedBy() === $this->userId ) { return true; } @@ -1596,16 +1596,16 @@ class ShareAPIController extends OCSController { // if the user is the recipient, i can unshare // the share with self - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === $this->userId + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === $this->userId ) { return true; } // The owner of the file and the creator of the share // can always delete the share - if ($share->getShareOwner() === $this->userId || - $share->getSharedBy() === $this->userId + if ($share->getShareOwner() === $this->userId + || $share->getSharedBy() === $this->userId ) { return true; } @@ -1632,16 +1632,16 @@ class ShareAPIController extends OCSController { * @suppress PhanUndeclaredClassMethod */ protected function canDeleteShareFromSelf(IShare $share): bool { - if ($share->getShareType() !== IShare::TYPE_GROUP && - $share->getShareType() !== IShare::TYPE_ROOM && - $share->getShareType() !== IShare::TYPE_DECK && - $share->getShareType() !== IShare::TYPE_SCIENCEMESH + if ($share->getShareType() !== IShare::TYPE_GROUP + && $share->getShareType() !== IShare::TYPE_ROOM + && $share->getShareType() !== IShare::TYPE_DECK + && $share->getShareType() !== IShare::TYPE_SCIENCEMESH ) { return false; } - if ($share->getShareOwner() === $this->userId || - $share->getSharedBy() === $this->userId + if ($share->getShareOwner() === $this->userId + || $share->getSharedBy() === $this->userId ) { // Delete the whole share, not just for self return false; @@ -1874,8 +1874,8 @@ class ShareAPIController extends OCSController { continue; } - $providerShares = - $this->shareManager->getSharesBy($viewer, $provider, $node, $reShares, -1, 0); + $providerShares + = $this->shareManager->getSharesBy($viewer, $provider, $node, $reShares, -1, 0); $shares = array_merge($shares, $providerShares); } diff --git a/apps/files_sharing/lib/Controller/ShareController.php b/apps/files_sharing/lib/Controller/ShareController.php index ad8023ba6bb..5a776379fce 100644 --- a/apps/files_sharing/lib/Controller/ShareController.php +++ b/apps/files_sharing/lib/Controller/ShareController.php @@ -1,4 +1,5 @@ eventDispatcher->dispatchTyped(new ShareLinkAccessedEvent($share, $step, $errorCode, $errorMessage)); diff --git a/apps/files_sharing/lib/Controller/ShareInfoController.php b/apps/files_sharing/lib/Controller/ShareInfoController.php index 0a290d69c65..b7e79aec830 100644 --- a/apps/files_sharing/lib/Controller/ShareInfoController.php +++ b/apps/files_sharing/lib/Controller/ShareInfoController.php @@ -1,4 +1,5 @@ externalSharesChecks()) { + if ($controller instanceof ExternalSharesController + && !$this->externalSharesChecks()) { throw new S2SException('Federated sharing not allowed'); } } @@ -84,13 +84,13 @@ class SharingCheckMiddleware extends Middleware { * @return bool */ private function externalSharesChecks(): bool { - if (!$this->reflector->hasAnnotation('NoIncomingFederatedSharingRequired') && - $this->config->getAppValue('files_sharing', 'incoming_server2server_share_enabled', 'yes') !== 'yes') { + if (!$this->reflector->hasAnnotation('NoIncomingFederatedSharingRequired') + && $this->config->getAppValue('files_sharing', 'incoming_server2server_share_enabled', 'yes') !== 'yes') { return false; } - if (!$this->reflector->hasAnnotation('NoOutgoingFederatedSharingRequired') && - $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') !== 'yes') { + if (!$this->reflector->hasAnnotation('NoOutgoingFederatedSharingRequired') + && $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') !== 'yes') { return false; } diff --git a/apps/files_sharing/lib/Migration/OwncloudGuestShareType.php b/apps/files_sharing/lib/Migration/OwncloudGuestShareType.php index c9511eaa136..3718306e380 100644 --- a/apps/files_sharing/lib/Migration/OwncloudGuestShareType.php +++ b/apps/files_sharing/lib/Migration/OwncloudGuestShareType.php @@ -1,4 +1,5 @@ config->getAppValue('files_sharing', 'installed_version', '0.0.0'); - return $appVersion === '0.10.0' || - $this->config->getAppValue('core', 'vendor', '') === 'owncloud'; + return $appVersion === '0.10.0' + || $this->config->getAppValue('core', 'vendor', '') === 'owncloud'; } } diff --git a/apps/files_sharing/lib/Migration/SetPasswordColumn.php b/apps/files_sharing/lib/Migration/SetPasswordColumn.php index 647e3bef8d3..f60af2817d4 100644 --- a/apps/files_sharing/lib/Migration/SetPasswordColumn.php +++ b/apps/files_sharing/lib/Migration/SetPasswordColumn.php @@ -1,4 +1,5 @@ getStatus() !== IShare::STATUS_ACCEPTED && - ($parentShare->getShareType() === IShare::TYPE_GROUP || - $parentShare->getShareType() === IShare::TYPE_USERGROUP || - $parentShare->getShareType() === IShare::TYPE_USER)) { + if ($parentShare->getStatus() !== IShare::STATUS_ACCEPTED + && ($parentShare->getShareType() === IShare::TYPE_GROUP + || $parentShare->getShareType() === IShare::TYPE_USERGROUP + || $parentShare->getShareType() === IShare::TYPE_USER)) { continue; } diff --git a/apps/files_sharing/lib/Notification/Listener.php b/apps/files_sharing/lib/Notification/Listener.php index c40ad6e8f7b..1cf0f845e7a 100644 --- a/apps/files_sharing/lib/Notification/Listener.php +++ b/apps/files_sharing/lib/Notification/Listener.php @@ -40,8 +40,8 @@ class Listener { $group = $this->groupManager->get($share->getSharedWith()); foreach ($group->getUsers() as $user) { - if ($user->getUID() === $share->getShareOwner() || - $user->getUID() === $share->getSharedBy()) { + if ($user->getUID() === $share->getShareOwner() + || $user->getUID() === $share->getSharedBy()) { continue; } @@ -72,8 +72,8 @@ class Listener { continue; } - if ($user->getUID() === $share->getShareOwner() || - $user->getUID() === $share->getSharedBy()) { + if ($user->getUID() === $share->getShareOwner() + || $user->getUID() === $share->getSharedBy()) { continue; } diff --git a/apps/files_sharing/lib/Notification/Notifier.php b/apps/files_sharing/lib/Notification/Notifier.php index 43f61258395..e4434ef0b37 100644 --- a/apps/files_sharing/lib/Notification/Notifier.php +++ b/apps/files_sharing/lib/Notification/Notifier.php @@ -67,9 +67,9 @@ class Notifier implements INotifier { * @since 9.0.0 */ public function prepare(INotification $notification, string $languageCode): INotification { - if ($notification->getApp() !== 'files_sharing' || - ($notification->getSubject() !== 'expiresTomorrow' && - $notification->getObjectType() !== 'share')) { + if ($notification->getApp() !== 'files_sharing' + || ($notification->getSubject() !== 'expiresTomorrow' + && $notification->getObjectType() !== 'share')) { throw new UnknownNotificationException('Unhandled app or subject'); } diff --git a/apps/files_sharing/lib/Scanner.php b/apps/files_sharing/lib/Scanner.php index 8a695ce9539..28972c1b462 100644 --- a/apps/files_sharing/lib/Scanner.php +++ b/apps/files_sharing/lib/Scanner.php @@ -1,4 +1,5 @@ getNodeId()] ?? null; if ( - $shareCacheEntry && - str_starts_with($shareCacheEntry->getPath(), $sourceInternalPath . '/') + $shareCacheEntry + && str_starts_with($shareCacheEntry->getPath(), $sourceInternalPath . '/') ) { $shares[] = $subShare; } @@ -95,9 +96,9 @@ class Updater { //Ownership is moved over foreach ($shares as $share) { if ( - $share->getShareType() !== IShare::TYPE_USER && - $share->getShareType() !== IShare::TYPE_GROUP && - $share->getShareType() !== IShare::TYPE_ROOM + $share->getShareType() !== IShare::TYPE_USER + && $share->getShareType() !== IShare::TYPE_GROUP + && $share->getShareType() !== IShare::TYPE_ROOM ) { continue; } diff --git a/apps/files_sharing/lib/ViewOnly.php b/apps/files_sharing/lib/ViewOnly.php index 2204d26388b..e075677248a 100644 --- a/apps/files_sharing/lib/ViewOnly.php +++ b/apps/files_sharing/lib/ViewOnly.php @@ -1,4 +1,5 @@ getData(); $this->assertEquals( - Constants::PERMISSION_READ | - Constants::PERMISSION_CREATE | - Constants::PERMISSION_UPDATE | - Constants::PERMISSION_DELETE | - Constants::PERMISSION_SHARE, + Constants::PERMISSION_READ + | Constants::PERMISSION_CREATE + | Constants::PERMISSION_UPDATE + | Constants::PERMISSION_DELETE + | Constants::PERMISSION_SHARE, $data['permissions'] ); $this->assertEmpty($data['expiration']); @@ -1021,11 +1022,11 @@ class ApiTest extends TestCase { $share1 = $this->shareManager->getShareById($share1->getFullId()); $this->assertEquals( - Constants::PERMISSION_READ | - Constants::PERMISSION_CREATE | - Constants::PERMISSION_UPDATE | - Constants::PERMISSION_DELETE | - Constants::PERMISSION_SHARE, + Constants::PERMISSION_READ + | Constants::PERMISSION_CREATE + | Constants::PERMISSION_UPDATE + | Constants::PERMISSION_DELETE + | Constants::PERMISSION_SHARE, $share1->getPermissions() ); diff --git a/apps/files_sharing/tests/ApplicationTest.php b/apps/files_sharing/tests/ApplicationTest.php index b1a635406b2..3ccaedcf568 100644 --- a/apps/files_sharing/tests/ApplicationTest.php +++ b/apps/files_sharing/tests/ApplicationTest.php @@ -1,4 +1,5 @@ ['itemType' => 'files', 'itemId' => '42'], 'accessList' => ['users' => ['celia', 'darius', 'faruk', 'gail'], 'bots' => ['r2-d2']], 'input' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], ] ], 'expected' => [ - 'users' => - [ - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'elena']], - ], + 'users' => [ + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'elena']], + ], 'bots' => [ ['value' => ['shareWith' => 'r2-d2']], ['value' => ['shareWith' => 'c-3po']], @@ -158,32 +157,30 @@ class ShareRecipientSorterTest extends TestCase { 'context' => ['itemType' => 'files', 'itemId' => '42'], 'accessList' => ['users' => false], 'input' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], ] ], 'expected' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], @@ -195,32 +192,30 @@ class ShareRecipientSorterTest extends TestCase { 'context' => ['itemType' => 'announcements', 'itemId' => '42'], 'accessList' => null, // not needed 'input' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], ] ], 'expected' => [ - 'users' => - [ - ['value' => ['shareWith' => 'alice']], - ['value' => ['shareWith' => 'bob']], - ['value' => ['shareWith' => 'celia']], - ['value' => ['shareWith' => 'darius']], - ['value' => ['shareWith' => 'elena']], - ['value' => ['shareWith' => 'faruk']], - ['value' => ['shareWith' => 'gail']], - ], + 'users' => [ + ['value' => ['shareWith' => 'alice']], + ['value' => ['shareWith' => 'bob']], + ['value' => ['shareWith' => 'celia']], + ['value' => ['shareWith' => 'darius']], + ['value' => ['shareWith' => 'elena']], + ['value' => ['shareWith' => 'faruk']], + ['value' => ['shareWith' => 'gail']], + ], 'bots' => [ ['value' => ['shareWith' => 'c-3po']], ['value' => ['shareWith' => 'r2-d2']], diff --git a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php index 769516cda85..33a4403b23c 100644 --- a/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php +++ b/apps/files_sharing/tests/Command/CleanupRemoteStoragesTest.php @@ -1,4 +1,5 @@ method('getToken')->willReturn($token); $share->method('getPassword')->willReturn($password); - if ($shareType === IShare::TYPE_USER || - $shareType === IShare::TYPE_GROUP || - $shareType === IShare::TYPE_LINK) { + if ($shareType === IShare::TYPE_USER + || $shareType === IShare::TYPE_GROUP + || $shareType === IShare::TYPE_LINK) { $share->method('getFullId')->willReturn('ocinternal:' . $id); } @@ -1897,15 +1898,15 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->method('createShare') ->with($this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getPermissions() === ( - Constants::PERMISSION_ALL & - ~Constants::PERMISSION_DELETE & - ~Constants::PERMISSION_CREATE - ) && - $share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === 'validUser' && - $share->getSharedBy() === 'currentUser'; + return $share->getNode() === $path + && $share->getPermissions() === ( + Constants::PERMISSION_ALL + & ~Constants::PERMISSION_DELETE + & ~Constants::PERMISSION_CREATE + ) + && $share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === 'validUser' + && $share->getSharedBy() === 'currentUser'; })) ->willReturnArgument(0); @@ -2008,11 +2009,11 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->method('createShare') ->with($this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getShareType() === IShare::TYPE_GROUP && - $share->getSharedWith() === 'validGroup' && - $share->getSharedBy() === 'currentUser'; + return $share->getNode() === $path + && $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getShareType() === IShare::TYPE_GROUP + && $share->getSharedWith() === 'validGroup' + && $share->getSharedBy() === 'currentUser'; })) ->willReturnArgument(0); @@ -2125,7 +2126,7 @@ class ShareAPIControllerTest extends TestCase { $file = $this->createMock(File::class); $file->method('getId')->willReturn(42); $file->method('getStorage')->willReturn($storage); - + $this->rootFolder->method('getUserFolder')->with($this->currentUser)->willReturnSelf(); $this->rootFolder->method('get')->with('valid-path')->willReturn($file); $this->rootFolder->method('getById') @@ -2161,12 +2162,12 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('createShare')->with( $this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getShareType() === IShare::TYPE_LINK && - $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) && - $share->getSharedBy() === 'currentUser' && - $share->getPassword() === null && - $share->getExpirationDate() === null; + return $share->getNode() === $path + && $share->getShareType() === IShare::TYPE_LINK + && $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) + && $share->getSharedBy() === 'currentUser' + && $share->getPassword() === null + && $share->getExpirationDate() === null; }) )->willReturnArgument(0); @@ -2241,13 +2242,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('createShare')->with( $this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getShareType() === IShare::TYPE_LINK && - $share->getPermissions() === (Constants::PERMISSION_ALL & ~(Constants::PERMISSION_SHARE)) && - $share->getSharedBy() === 'currentUser' && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === null; + return $share->getNode() === $path + && $share->getShareType() === IShare::TYPE_LINK + && $share->getPermissions() === (Constants::PERMISSION_ALL & ~(Constants::PERMISSION_SHARE)) + && $share->getSharedBy() === 'currentUser' + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === null; }) )->willReturnArgument(0); @@ -2327,12 +2328,12 @@ class ShareAPIControllerTest extends TestCase { $date = new \DateTime('2000-01-01'); $date->setTime(0, 0, 0); - return $share->getNode() === $path && - $share->getShareType() === IShare::TYPE_LINK && - $share->getPermissions() === Constants::PERMISSION_READ | Constants::PERMISSION_SHARE && - $share->getSharedBy() === 'currentUser' && - $share->getPassword() === null && - $share->getExpirationDate() == $date; + return $share->getNode() === $path + && $share->getShareType() === IShare::TYPE_LINK + && $share->getPermissions() === Constants::PERMISSION_READ | Constants::PERMISSION_SHARE + && $share->getSharedBy() === 'currentUser' + && $share->getPassword() === null + && $share->getExpirationDate() == $date; }) )->willReturnArgument(0); @@ -2421,15 +2422,15 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->method('createShare') ->with($this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getPermissions() === ( - Constants::PERMISSION_ALL & - ~Constants::PERMISSION_DELETE & - ~Constants::PERMISSION_CREATE - ) && - $share->getShareType() === IShare::TYPE_REMOTE && - $share->getSharedWith() === 'user@example.org' && - $share->getSharedBy() === 'currentUser'; + return $share->getNode() === $path + && $share->getPermissions() === ( + Constants::PERMISSION_ALL + & ~Constants::PERMISSION_DELETE + & ~Constants::PERMISSION_CREATE + ) + && $share->getShareType() === IShare::TYPE_REMOTE + && $share->getSharedWith() === 'user@example.org' + && $share->getSharedBy() === 'currentUser'; })) ->willReturnArgument(0); @@ -2492,15 +2493,15 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->method('createShare') ->with($this->callback(function (IShare $share) use ($path) { - return $share->getNode() === $path && - $share->getPermissions() === ( - Constants::PERMISSION_ALL & - ~Constants::PERMISSION_DELETE & - ~Constants::PERMISSION_CREATE - ) && - $share->getShareType() === IShare::TYPE_REMOTE_GROUP && - $share->getSharedWith() === 'group@example.org' && - $share->getSharedBy() === 'currentUser'; + return $share->getNode() === $path + && $share->getPermissions() === ( + Constants::PERMISSION_ALL + & ~Constants::PERMISSION_DELETE + & ~Constants::PERMISSION_CREATE + ) + && $share->getShareType() === IShare::TYPE_REMOTE_GROUP + && $share->getSharedWith() === 'group@example.org' + && $share->getSharedBy() === 'currentUser'; })) ->willReturnArgument(0); @@ -2550,9 +2551,9 @@ class ShareAPIControllerTest extends TestCase { ->with( $share, 'recipientRoom', - Constants::PERMISSION_ALL & - ~Constants::PERMISSION_DELETE & - ~Constants::PERMISSION_CREATE, + Constants::PERMISSION_ALL + & ~Constants::PERMISSION_DELETE + & ~Constants::PERMISSION_CREATE, '' )->willReturnCallback( function ($share): void { @@ -2842,14 +2843,14 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) { - return $share->getPermissions() === Constants::PERMISSION_READ && - $share->getPassword() === null && - $share->getExpirationDate() === null && + return $share->getPermissions() === Constants::PERMISSION_READ + && $share->getPassword() === null + && $share->getExpirationDate() === null // Once set a note or a label are never back to null, only to an // empty string. - $share->getNote() === '' && - $share->getLabel() === '' && - $share->getHideDownload() === false; + && $share->getNote() === '' + && $share->getLabel() === '' + && $share->getHideDownload() === false; }) )->willReturnArgument(0); @@ -2901,12 +2902,12 @@ class ShareAPIControllerTest extends TestCase { $date = new \DateTime('2000-01-01'); $date->setTime(0, 0, 0); - return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) && - $share->getPassword() === 'password' && - $share->getExpirationDate() == $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) + && $share->getPassword() === 'password' + && $share->getExpirationDate() == $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -2957,9 +2958,9 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) { - return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) && - $share->getPassword() === 'password' && - $share->getExpirationDate() === null; + return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) + && $share->getPassword() === 'password' + && $share->getExpirationDate() === null; }) )->willReturnArgument(0); @@ -3225,13 +3226,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'newpassword' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'newpassword' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3279,13 +3280,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3377,13 +3378,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === false && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === false + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3427,13 +3428,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === false && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === false + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3495,13 +3496,13 @@ class ShareAPIControllerTest extends TestCase { $date = new \DateTime('2010-12-23'); $date->setTime(0, 0, 0); - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() == $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() == $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3553,13 +3554,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3614,13 +3615,13 @@ class ShareAPIControllerTest extends TestCase { $this->shareManager->expects($this->once())->method('updateShare')->with( $this->callback(function (IShare $share) use ($date): bool { - return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === (Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE | Constants::PERMISSION_DELETE) + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); @@ -3676,13 +3677,13 @@ class ShareAPIControllerTest extends TestCase { ->method('updateShare') ->with( $this->callback(function (IShare $share) use ($date) { - return $share->getPermissions() === Constants::PERMISSION_ALL && - $share->getPassword() === 'password' && - $share->getSendPasswordByTalk() === true && - $share->getExpirationDate() === $date && - $share->getNote() === 'note' && - $share->getLabel() === 'label' && - $share->getHideDownload() === true; + return $share->getPermissions() === Constants::PERMISSION_ALL + && $share->getPassword() === 'password' + && $share->getSendPasswordByTalk() === true + && $share->getExpirationDate() === $date + && $share->getNote() === 'note' + && $share->getLabel() === 'label' + && $share->getHideDownload() === true; }) )->willReturnArgument(0); diff --git a/apps/files_sharing/tests/Controller/ShareControllerTest.php b/apps/files_sharing/tests/Controller/ShareControllerTest.php index 27fa7ecf480..9a576f86d42 100644 --- a/apps/files_sharing/tests/Controller/ShareControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareControllerTest.php @@ -1,4 +1,5 @@ getOriginalLocation()); $freeSpace = $this->view->free_space($restoreFolder); - if ($freeSpace === FileInfo::SPACE_NOT_COMPUTED || - $freeSpace === FileInfo::SPACE_UNKNOWN || - $freeSpace === FileInfo::SPACE_UNLIMITED) { + if ($freeSpace === FileInfo::SPACE_NOT_COMPUTED + || $freeSpace === FileInfo::SPACE_UNKNOWN + || $freeSpace === FileInfo::SPACE_UNLIMITED) { return true; } $filesize = $fileInfo->getSize(); diff --git a/apps/files_trashbin/lib/Storage.php b/apps/files_trashbin/lib/Storage.php index 9ddb8e791fa..82b7af5a934 100644 --- a/apps/files_trashbin/lib/Storage.php +++ b/apps/files_trashbin/lib/Storage.php @@ -1,4 +1,5 @@ logger->info( - "Can't move file " . $path . - ' to the trash bin, therefore it was deleted right away'); + "Can't move file " . $path + . ' to the trash bin, therefore it was deleted right away'); return $this->storage->unlink($path); } diff --git a/apps/files_trashbin/lib/Trash/BackendNotFoundException.php b/apps/files_trashbin/lib/Trash/BackendNotFoundException.php index 8e23a04851a..292b6ee293c 100644 --- a/apps/files_trashbin/lib/Trash/BackendNotFoundException.php +++ b/apps/files_trashbin/lib/Trash/BackendNotFoundException.php @@ -1,4 +1,5 @@ backends), function ($type, $registeredType) use ($storage) { if ( - $storage->instanceOfStorage($registeredType) && - ($type === '' || is_subclass_of($registeredType, $type)) + $storage->instanceOfStorage($registeredType) + && ($type === '' || is_subclass_of($registeredType, $type)) ) { return $registeredType; } else { diff --git a/apps/files_trashbin/lib/Trashbin.php b/apps/files_trashbin/lib/Trashbin.php index 1951379cfcb..667066c2fca 100644 --- a/apps/files_trashbin/lib/Trashbin.php +++ b/apps/files_trashbin/lib/Trashbin.php @@ -1,4 +1,5 @@ error('trash bin database inconsistent! ($user: ' . $user . ' $filename: ' . $filename . ', $timestamp: ' . $timestamp . ')', ['app' => 'files_trashbin']); } else { // if location no longer exists, restore file in the root directory - if ($location !== '/' && - (!$view->is_dir('files/' . $location) || - !$view->isCreatable('files/' . $location)) + if ($location !== '/' + && (!$view->is_dir('files/' . $location) + || !$view->isCreatable('files/' . $location)) ) { $location = ''; } diff --git a/apps/files_versions/appinfo/routes.php b/apps/files_versions/appinfo/routes.php index 11b5e0c783f..22ded5e8723 100644 --- a/apps/files_versions/appinfo/routes.php +++ b/apps/files_versions/appinfo/routes.php @@ -1,4 +1,5 @@ $backendsForType) { if ( - $storage->instanceOfStorage($type) && - ($foundType === '' || is_subclass_of($type, $foundType)) + $storage->instanceOfStorage($type) + && ($foundType === '' || is_subclass_of($type, $foundType)) ) { foreach ($backendsForType as $backend) { /** @var IVersionBackend $backend */ diff --git a/apps/oauth2/appinfo/routes.php b/apps/oauth2/appinfo/routes.php index f40eaf96406..b34aff05552 100644 --- a/apps/oauth2/appinfo/routes.php +++ b/apps/oauth2/appinfo/routes.php @@ -1,4 +1,5 @@ method('update') ->with( $this->callback(function (AccessToken $token) { - return $token->getHashedCode() === hash('sha512', 'random128') && - $token->getEncryptedToken() === 'newEncryptedToken'; + return $token->getHashedCode() === hash('sha512', 'random128') + && $token->getEncryptedToken() === 'newEncryptedToken'; }) ); @@ -478,8 +479,8 @@ class OauthApiControllerTest extends TestCase { ->method('update') ->with( $this->callback(function (AccessToken $token) { - return $token->getHashedCode() === hash('sha512', 'random128') && - $token->getEncryptedToken() === 'newEncryptedToken'; + return $token->getHashedCode() === hash('sha512', 'random128') + && $token->getEncryptedToken() === 'newEncryptedToken'; }) ); @@ -577,8 +578,8 @@ class OauthApiControllerTest extends TestCase { ->method('update') ->with( $this->callback(function (AccessToken $token) { - return $token->getHashedCode() === hash('sha512', 'random128') && - $token->getEncryptedToken() === 'newEncryptedToken'; + return $token->getHashedCode() === hash('sha512', 'random128') + && $token->getEncryptedToken() === 'newEncryptedToken'; }) ); diff --git a/apps/oauth2/tests/Controller/SettingsControllerTest.php b/apps/oauth2/tests/Controller/SettingsControllerTest.php index cdde611c957..030a220e3d7 100644 --- a/apps/oauth2/tests/Controller/SettingsControllerTest.php +++ b/apps/oauth2/tests/Controller/SettingsControllerTest.php @@ -1,4 +1,5 @@ expects($this->once()) ->method('insert') ->with($this->callback(function (Client $c) { - return $c->getName() === 'My Client Name' && - $c->getRedirectUri() === 'https://example.com/' && - $c->getSecret() === bin2hex('MyHashedSecret') && - $c->getClientIdentifier() === 'MyClientIdentifier'; + return $c->getName() === 'My Client Name' + && $c->getRedirectUri() === 'https://example.com/' + && $c->getSecret() === bin2hex('MyHashedSecret') + && $c->getClientIdentifier() === 'MyClientIdentifier'; }))->willReturnCallback(function (Client $c) { $c->setId(42); return $c; diff --git a/apps/oauth2/tests/Db/AccessTokenMapperTest.php b/apps/oauth2/tests/Db/AccessTokenMapperTest.php index 1ed282dae1d..41a79fe725b 100644 --- a/apps/oauth2/tests/Db/AccessTokenMapperTest.php +++ b/apps/oauth2/tests/Db/AccessTokenMapperTest.php @@ -1,4 +1,5 @@ config->getSystemValue('force_language', false) === false || - $this->groupManager->isAdmin($currentLoggedInUser->getUID()) || - $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) + $this->config->getSystemValue('force_language', false) === false + || $this->groupManager->isAdmin($currentLoggedInUser->getUID()) + || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) ) { $permittedFields[] = self::USER_FIELD_LANGUAGE; } if ( - $this->config->getSystemValue('force_locale', false) === false || - $this->groupManager->isAdmin($currentLoggedInUser->getUID()) || - $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) + $this->config->getSystemValue('force_locale', false) === false + || $this->groupManager->isAdmin($currentLoggedInUser->getUID()) + || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) ) { $permittedFields[] = self::USER_FIELD_LOCALE; $permittedFields[] = self::USER_FIELD_FIRST_DAY_OF_WEEK; @@ -1000,8 +1000,8 @@ class UsersController extends AUserDataOCSController { // Check if admin / subadmin $subAdminManager = $this->groupManager->getSubAdmin(); if ( - $this->groupManager->isAdmin($currentLoggedInUser->getUID()) || - $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin') + $this->groupManager->isAdmin($currentLoggedInUser->getUID()) + || $this->groupManager->isDelegatedAdmin($currentLoggedInUser->getUID()) && !$this->groupManager->isInGroup($targetUser->getUID(), 'admin') || $subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser) ) { // They have permissions over the user diff --git a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php index c7be073b8af..b014d6a1495 100644 --- a/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php +++ b/apps/provisioning_api/lib/Middleware/Exceptions/NotSubAdminException.php @@ -1,4 +1,5 @@ authorizedGroupService->create($groupData['gid'], $class); } } - + return new DataResponse(['valid' => true]); } } diff --git a/apps/settings/lib/Controller/ChangePasswordController.php b/apps/settings/lib/Controller/ChangePasswordController.php index 2154a9ab11b..a874a47c16a 100644 --- a/apps/settings/lib/Controller/ChangePasswordController.php +++ b/apps/settings/lib/Controller/ChangePasswordController.php @@ -1,4 +1,5 @@ userSession->getUser(); $targetUser = $this->userManager->get($username); - if ($currentUser === null || $targetUser === null || - !($this->groupManager->isAdmin($this->userId) || - $this->groupManager->getSubAdmin()->isUserAccessible($currentUser, $targetUser)) + if ($currentUser === null || $targetUser === null + || !($this->groupManager->isAdmin($this->userId) + || $this->groupManager->getSubAdmin()->isUserAccessible($currentUser, $targetUser)) ) { return new JSONResponse([ 'status' => 'error', diff --git a/apps/settings/lib/Controller/CommonSettingsTrait.php b/apps/settings/lib/Controller/CommonSettingsTrait.php index 67398d1357b..75d2b1f2f9e 100644 --- a/apps/settings/lib/Controller/CommonSettingsTrait.php +++ b/apps/settings/lib/Controller/CommonSettingsTrait.php @@ -1,4 +1,5 @@ appManager->isEnabledForUser('user_ldap')) { - $isLDAPUsed = - $this->groupManager->isBackendUsed('\OCA\User_LDAP\Group_Proxy'); + $isLDAPUsed + = $this->groupManager->isBackendUsed('\OCA\User_LDAP\Group_Proxy'); if ($isLDAPUsed) { // LDAP user count can be slow, so we sort by group name here $sortGroupsBy = MetaData::SORT_GROUPNAME; diff --git a/apps/settings/lib/Hooks.php b/apps/settings/lib/Hooks.php index d4ee93597e2..f59013ca5e1 100644 --- a/apps/settings/lib/Hooks.php +++ b/apps/settings/lib/Hooks.php @@ -1,4 +1,5 @@ getEMailAddress() || - $user->getLastLogin() === 0) { + if ($oldMailAddress === $user->getEMailAddress() + || $user->getLastLogin() === 0) { // Email didn't really change or user didn't login, // so don't create activities and emails. return; diff --git a/apps/settings/lib/Listener/MailProviderListener.php b/apps/settings/lib/Listener/MailProviderListener.php index 974378c0006..61446f1e6cb 100644 --- a/apps/settings/lib/Listener/MailProviderListener.php +++ b/apps/settings/lib/Listener/MailProviderListener.php @@ -38,11 +38,11 @@ class MailProviderListener implements IEventListener { $this->handleSetValue($event); return; } - + } private function handleGetValue(DeclarativeSettingsGetValueEvent $event): void { - + if ($event->getFieldId() === 'mail_providers_enabled') { $event->setValue((int)$this->config->getValueBool('core', 'mail_providers_enabled', true)); } diff --git a/apps/settings/lib/Mailer/NewUserMailHelper.php b/apps/settings/lib/Mailer/NewUserMailHelper.php index bd4de2b2087..202495a020e 100644 --- a/apps/settings/lib/Mailer/NewUserMailHelper.php +++ b/apps/settings/lib/Mailer/NewUserMailHelper.php @@ -1,4 +1,5 @@ $sectionsByPriority) { foreach ($sectionsByPriority as $section) { if ( - stripos($section->getName(), $query->getTerm()) === false && - stripos($section->getID(), $query->getTerm()) === false + stripos($section->getName(), $query->getTerm()) === false + && stripos($section->getID(), $query->getTerm()) === false ) { continue; } diff --git a/apps/settings/lib/Sections/Admin/Delegation.php b/apps/settings/lib/Sections/Admin/Delegation.php index 2a455f1e549..0dd3b48c20b 100644 --- a/apps/settings/lib/Sections/Admin/Delegation.php +++ b/apps/settings/lib/Sections/Admin/Delegation.php @@ -1,4 +1,5 @@ l10n->t('Could not check that the data directory is protected. Please check manually that your server does not allow access to the data directory.') . "\n" . $this->serverConfigHelp()); } return SetupResult::success(); - + } } diff --git a/apps/settings/lib/SetupChecks/JavaScriptModules.php b/apps/settings/lib/SetupChecks/JavaScriptModules.php index e09dc459dc8..72f58405811 100644 --- a/apps/settings/lib/SetupChecks/JavaScriptModules.php +++ b/apps/settings/lib/SetupChecks/JavaScriptModules.php @@ -55,6 +55,6 @@ class JavaScriptModules implements ISetupCheck { return SetupResult::warning($this->l10n->t('Unable to run check for JavaScript support. Please remedy or confirm manually if your webserver serves `.mjs` files using the JavaScript MIME type.') . "\n" . $this->serverConfigHelp()); } return SetupResult::error($this->l10n->t('Your webserver does not serve `.mjs` files using the JavaScript MIME type. This will break some apps by preventing browsers from executing the JavaScript files. You should configure your webserver to serve `.mjs` files with either the `text/javascript` or `application/javascript` MIME type.')); - + } } diff --git a/apps/settings/lib/SetupChecks/PhpOpcacheSetup.php b/apps/settings/lib/SetupChecks/PhpOpcacheSetup.php index ee2e6e57335..83b7be1c390 100644 --- a/apps/settings/lib/SetupChecks/PhpOpcacheSetup.php +++ b/apps/settings/lib/SetupChecks/PhpOpcacheSetup.php @@ -87,10 +87,10 @@ class PhpOpcacheSetup implements ISetupCheck { $memory_consumption = $this->iniGetWrapper->getNumeric('opcache.memory_consumption') ?? 0; if ( // Do not recommend to raise the interned strings buffer size above a quarter of the total OPcache size - ($interned_strings_buffer < ($memory_consumption / 4)) && - ( - empty($status['interned_strings_usage']['free_memory']) || - ($status['interned_strings_usage']['used_memory'] / $status['interned_strings_usage']['free_memory'] > 9) + ($interned_strings_buffer < ($memory_consumption / 4)) + && ( + empty($status['interned_strings_usage']['free_memory']) + || ($status['interned_strings_usage']['used_memory'] / $status['interned_strings_usage']['free_memory'] > 9) ) ) { $recommendations[] = $this->l10n->t('The OPcache interned strings buffer is nearly full. To assure that repeating strings can be effectively cached, it is recommended to apply "opcache.interned_strings_buffer" to your PHP configuration with a value higher than "%s".', [($this->iniGetWrapper->getNumeric('opcache.interned_strings_buffer') ?: 'currently')]); diff --git a/apps/settings/templates/settings/empty.php b/apps/settings/templates/settings/empty.php index f7ae4113ac6..ce4477fa9df 100644 --- a/apps/settings/templates/settings/empty.php +++ b/apps/settings/templates/settings/empty.php @@ -1,4 +1,5 @@ - [ - 'sharebymail' => - [ - 'enabled' => $this->manager->shareApiAllowLinks(), - 'send_password_by_mail' => $this->settingsManager->sendPasswordByMail(), - 'upload_files_drop' => [ - 'enabled' => true, - ], - 'password' => [ - 'enabled' => true, - 'enforced' => $this->manager->shareApiLinkEnforcePassword(), - ], - 'expire_date' => [ - 'enabled' => true, - 'enforced' => $this->manager->shareApiLinkDefaultExpireDateEnforced(), - ], - ] + 'files_sharing' + => [ + 'sharebymail' => [ + 'enabled' => $this->manager->shareApiAllowLinks(), + 'send_password_by_mail' => $this->settingsManager->sendPasswordByMail(), + 'upload_files_drop' => [ + 'enabled' => true, + ], + 'password' => [ + 'enabled' => true, + 'enforced' => $this->manager->shareApiLinkEnforcePassword(), + ], + 'expire_date' => [ + 'enabled' => true, + 'enforced' => $this->manager->shareApiLinkDefaultExpireDateEnforced(), + ], + ] ] ]; } diff --git a/apps/sharebymail/lib/Settings/Admin.php b/apps/sharebymail/lib/Settings/Admin.php index 2bd58f7307f..8f27bbff6d6 100644 --- a/apps/sharebymail/lib/Settings/Admin.php +++ b/apps/sharebymail/lib/Settings/Admin.php @@ -1,4 +1,5 @@ getPassword() !== $share->getPassword() || - ($originalShare->getSendPasswordByTalk() && !$share->getSendPasswordByTalk()))) { + if ($validPassword && ($originalShare->getPassword() !== $share->getPassword() + || ($originalShare->getSendPasswordByTalk() && !$share->getSendPasswordByTalk()))) { $emails = $this->getSharedWithEmails($share); $validEmails = array_filter($emails, function ($email) { return $this->mailer->validateMailAddress($email); diff --git a/apps/sharebymail/tests/CapabilitiesTest.php b/apps/sharebymail/tests/CapabilitiesTest.php index 0e3e74f5d2d..7327e679533 100644 --- a/apps/sharebymail/tests/CapabilitiesTest.php +++ b/apps/sharebymail/tests/CapabilitiesTest.php @@ -42,24 +42,23 @@ class CapabilitiesTest extends TestCase { ->willReturn(true); $capabilities = [ - 'files_sharing' => - [ - 'sharebymail' => - [ + 'files_sharing' + => [ + 'sharebymail' => [ + 'enabled' => true, + 'send_password_by_mail' => true, + 'upload_files_drop' => [ 'enabled' => true, - 'send_password_by_mail' => true, - 'upload_files_drop' => [ - 'enabled' => true, - ], - 'password' => [ - 'enabled' => true, - 'enforced' => false, - ], - 'expire_date' => [ - 'enabled' => true, - 'enforced' => false, - ], - ] + ], + 'password' => [ + 'enabled' => true, + 'enforced' => false, + ], + 'expire_date' => [ + 'enabled' => true, + 'enforced' => false, + ], + ] ] ]; diff --git a/apps/systemtags/appinfo/routes.php b/apps/systemtags/appinfo/routes.php index d61a35ef630..53997646cc6 100644 --- a/apps/systemtags/appinfo/routes.php +++ b/apps/systemtags/appinfo/routes.php @@ -1,4 +1,5 @@ addArgument( 'key', InputArgument::OPTIONAL, - 'Key to update the theming app configuration (leave empty to get a list of all configured values)' . PHP_EOL . - 'One of: ' . implode(', ', self::SUPPORTED_KEYS) + 'Key to update the theming app configuration (leave empty to get a list of all configured values)' . PHP_EOL + . 'One of: ' . implode(', ', self::SUPPORTED_KEYS) ) ->addArgument( 'value', diff --git a/apps/theming/lib/Controller/IconController.php b/apps/theming/lib/Controller/IconController.php index f487663d8c8..e82faf78a79 100644 --- a/apps/theming/lib/Controller/IconController.php +++ b/apps/theming/lib/Controller/IconController.php @@ -1,4 +1,5 @@ - [ + 'data' + => [ 'name' => $name, 'url' => $this->imageManager->getImageUrl($key), 'message' => $this->l10n->t('Saved'), @@ -294,8 +295,8 @@ class ThemingController extends Controller { return new DataResponse( [ - 'data' => - [ + 'data' + => [ 'value' => $value, 'message' => $this->l10n->t('Saved'), ], @@ -317,8 +318,8 @@ class ThemingController extends Controller { return new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => $this->l10n->t('Saved'), ], 'status' => 'success' @@ -462,8 +463,8 @@ class ThemingController extends Controller { 'theme_color' => $this->themingDefaults->getColorPrimary(), 'background_color' => $this->themingDefaults->getColorPrimary(), 'description' => $description, - 'icons' => - [ + 'icons' + => [ [ 'src' => $this->urlGenerator->linkToRoute('theming.Icon.getTouchIcon', ['app' => $app]) . '?v=' . $cacheBusterValue, diff --git a/apps/theming/lib/IconBuilder.php b/apps/theming/lib/IconBuilder.php index 55e0a1e930c..63f4559970d 100644 --- a/apps/theming/lib/IconBuilder.php +++ b/apps/theming/lib/IconBuilder.php @@ -1,4 +1,5 @@ ' . - '' . - '' . - ''; + $background = '' + . '' + . '' + . ''; // resize svg magic as this seems broken in Imagemagick if ($mime === 'image/svg+xml' || substr($appIconContent, 0, 4) === '' . $entity . ''; + $footer = '' . $entity . ''; } else { $footer = '' . $entity . ''; } @@ -154,8 +155,8 @@ class ThemingDefaults extends \OC_Defaults { if ($link['url'] !== '' && filter_var($link['url'], FILTER_VALIDATE_URL) ) { - $legalLinks .= $divider . '' . $link['text'] . ''; + $legalLinks .= $divider . '' . $link['text'] . ''; $divider = ' · '; } } diff --git a/apps/theming/lib/Util.php b/apps/theming/lib/Util.php index b7022dae8b9..797456632fc 100644 --- a/apps/theming/lib/Util.php +++ b/apps/theming/lib/Util.php @@ -1,4 +1,5 @@ ' . - ''; + $radioButtonIcon = '' + . ''; return base64_encode($radioButtonIcon); } diff --git a/apps/theming/tests/Controller/ThemingControllerTest.php b/apps/theming/tests/Controller/ThemingControllerTest.php index 6fb9be64ad3..39debcef45f 100644 --- a/apps/theming/tests/Controller/ThemingControllerTest.php +++ b/apps/theming/tests/Controller/ThemingControllerTest.php @@ -114,8 +114,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => $message, ], 'status' => 'success', @@ -172,8 +172,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => $message, ], 'status' => 'error', @@ -203,8 +203,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => 'No file uploaded', ], 'status' => 'failure', @@ -233,8 +233,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => 'Invalid key', ], 'status' => 'failure', @@ -282,8 +282,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => 'Unsupported image type', ], 'status' => 'failure' @@ -323,8 +323,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => 'Unsupported image type', ], 'status' => 'failure' @@ -387,8 +387,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'name' => 'logo.svg', 'message' => 'Saved', 'url' => 'imageUrl', @@ -436,8 +436,8 @@ class ThemingControllerTest extends TestCase { ->willReturn('imageUrl'); $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'name' => 'logo.svg', 'message' => 'Saved', 'url' => 'imageUrl', @@ -481,8 +481,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => 'Unsupported image type', ], 'status' => 'failure' @@ -532,8 +532,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => $expectedErrorMessage, ], 'status' => 'failure' @@ -571,8 +571,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'message' => $expectedErrorMessage ], 'status' => 'failure' @@ -596,8 +596,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'value' => 'MyValue', 'message' => 'Saved' ], @@ -631,8 +631,8 @@ class ThemingControllerTest extends TestCase { $expected = new DataResponse( [ - 'data' => - [ + 'data' + => [ 'value' => $value, 'message' => 'Saved', ], @@ -748,8 +748,8 @@ class ThemingControllerTest extends TestCase { $response = new JSONResponse([ 'name' => 'Nextcloud', 'start_url' => 'localhost', - 'icons' => - [ + 'icons' + => [ [ 'src' => 'touchicon?v=0', 'type' => 'image/png', diff --git a/apps/theming/tests/Themes/DarkHighContrastThemeTest.php b/apps/theming/tests/Themes/DarkHighContrastThemeTest.php index ff4808149ad..d03e8b13300 100644 --- a/apps/theming/tests/Themes/DarkHighContrastThemeTest.php +++ b/apps/theming/tests/Themes/DarkHighContrastThemeTest.php @@ -1,4 +1,5 @@ notificationManager->expects($this->once()) ->method('markProcessed') ->with($this->callback(function (INotification $notification) { - return $notification->getUser() === $this->testUID && - $notification->getObjectType() === 'create' && - $notification->getObjectId() === 'codes' && - $notification->getApp() === 'twofactor_backupcodes'; + return $notification->getUser() === $this->testUID + && $notification->getObjectType() === 'create' + && $notification->getObjectId() === 'codes' + && $notification->getApp() === 'twofactor_backupcodes'; })); // Create codes diff --git a/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php b/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php index 16a0e8012f7..6b162894258 100644 --- a/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php +++ b/apps/twofactor_backupcodes/tests/Unit/BackgroundJob/RememberBackupCodesJobTest.php @@ -154,12 +154,12 @@ class RememberBackupCodesJobTest extends TestCase { $this->notificationManager->expects($this->once()) ->method('notify') ->with($this->callback(function (INotification $n) { - return $n->getApp() === 'twofactor_backupcodes' && - $n->getUser() === 'validUID' && - $n->getDateTime()->getTimestamp() === 10000000 && - $n->getObjectType() === 'create' && - $n->getObjectId() === 'codes' && - $n->getSubject() === 'create_backupcodes'; + return $n->getApp() === 'twofactor_backupcodes' + && $n->getUser() === 'validUID' + && $n->getDateTime()->getTimestamp() === 10000000 + && $n->getObjectType() === 'create' + && $n->getObjectId() === 'codes' + && $n->getSubject() === 'create_backupcodes'; })); self::invokePrivate($this->job, 'run', [['uid' => 'validUID']]); @@ -198,11 +198,11 @@ class RememberBackupCodesJobTest extends TestCase { $this->notificationManager->expects($this->once()) ->method('markProcessed') ->with($this->callback(function (INotification $n) { - return $n->getApp() === 'twofactor_backupcodes' && - $n->getUser() === 'validUID' && - $n->getObjectType() === 'create' && - $n->getObjectId() === 'codes' && - $n->getSubject() === 'create_backupcodes'; + return $n->getApp() === 'twofactor_backupcodes' + && $n->getUser() === 'validUID' + && $n->getObjectType() === 'create' + && $n->getObjectId() === 'codes' + && $n->getSubject() === 'create_backupcodes'; })); $this->notificationManager->expects($this->never()) diff --git a/apps/twofactor_backupcodes/tests/Unit/Listener/ClearNotificationsTest.php b/apps/twofactor_backupcodes/tests/Unit/Listener/ClearNotificationsTest.php index fc80344ac57..229d8df05d3 100644 --- a/apps/twofactor_backupcodes/tests/Unit/Listener/ClearNotificationsTest.php +++ b/apps/twofactor_backupcodes/tests/Unit/Listener/ClearNotificationsTest.php @@ -48,10 +48,10 @@ class ClearNotificationsTest extends TestCase { $this->notificationManager->expects($this->once()) ->method('markProcessed') ->with($this->callback(function (INotification $n) { - return $n->getUser() === 'fritz' && - $n->getApp() === 'twofactor_backupcodes' && - $n->getObjectType() === 'create' && - $n->getObjectId() === 'codes'; + return $n->getUser() === 'fritz' + && $n->getApp() === 'twofactor_backupcodes' + && $n->getObjectType() === 'create' + && $n->getObjectId() === 'codes'; })); $this->listener->handle($event); diff --git a/apps/updatenotification/lib/AppInfo/Application.php b/apps/updatenotification/lib/AppInfo/Application.php index 56012667bb4..2a1678da5db 100644 --- a/apps/updatenotification/lib/AppInfo/Application.php +++ b/apps/updatenotification/lib/AppInfo/Application.php @@ -63,8 +63,8 @@ class Application extends App implements IBootstrap { return; } - if (!$appManager->isEnabledForUser('notifications') && - $groupManager->isAdmin($user->getUID())) { + if (!$appManager->isEnabledForUser('notifications') + && $groupManager->isAdmin($user->getUID())) { try { $updateChecker = $container->get(UpdateChecker::class); } catch (ContainerExceptionInterface $e) { diff --git a/apps/updatenotification/templates/empty.php b/apps/updatenotification/templates/empty.php index 47473ebab9d..6e020c591ed 100644 --- a/apps/updatenotification/templates/empty.php +++ b/apps/updatenotification/templates/empty.php @@ -1,4 +1,5 @@ connection->getConnectionResource(); try { // try PASSWD extended operation first - return @$this->invokeLDAPMethod('exopPasswd', $userDN, '', $password) || - @$this->invokeLDAPMethod('modReplace', $userDN, $password); + return @$this->invokeLDAPMethod('exopPasswd', $userDN, '', $password) + || @$this->invokeLDAPMethod('modReplace', $userDN, $password); } catch (ConstraintViolationException $e) { throw new HintException('Password change rejected.', Util::getL10N('user_ldap')->t('Password change rejected. Hint: %s', $e->getMessage()), (int)$e->getCode()); } @@ -1811,8 +1811,8 @@ class Access extends LDAPUtility { * user. Instead we write a log message. */ $this->logger->info( - 'Passed string does not resemble a valid GUID. Known UUID ' . - '({uuid}) probably does not match UUID configuration.', + 'Passed string does not resemble a valid GUID. Known UUID ' + . '({uuid}) probably does not match UUID configuration.', ['app' => 'user_ldap', 'uuid' => $guid] ); return $guid; diff --git a/apps/user_ldap/lib/AccessFactory.php b/apps/user_ldap/lib/AccessFactory.php index c5c8ca17e41..da114c467a7 100644 --- a/apps/user_ldap/lib/AccessFactory.php +++ b/apps/user_ldap/lib/AccessFactory.php @@ -1,4 +1,5 @@ isDNPartOfBase($knownDn, $access->getConnection()->ldapBaseUsers)) { $output->writeln( - "User $knownDn is not in one of the configured user bases: " . - implode(',', $access->getConnection()->ldapBaseUsers) . - '.' + "User $knownDn is not in one of the configured user bases: " + . implode(',', $access->getConnection()->ldapBaseUsers) + . '.' ); } diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index b25a2e72b2b..336179ac341 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -661,8 +661,8 @@ class Connection extends LDAPUtility { $this->doConnect($this->configuration->ldapBackupHost ?? '', $this->configuration->ldapBackupPort ?? ''); $this->bindResult = []; $bindStatus = $this->bind(); - $error = $this->ldap->isResource($this->ldapConnectionRes) ? - $this->ldap->errno($this->ldapConnectionRes) : -1; + $error = $this->ldap->isResource($this->ldapConnectionRes) + ? $this->ldap->errno($this->ldapConnectionRes) : -1; if ($bindStatus && $error === 0 && !$forceBackupHost) { //when bind to backup server succeeded and failed to main server, //skip contacting it for 15min diff --git a/apps/user_ldap/lib/ConnectionFactory.php b/apps/user_ldap/lib/ConnectionFactory.php index fbc30f6b73f..dd0ad31920a 100644 --- a/apps/user_ldap/lib/ConnectionFactory.php +++ b/apps/user_ldap/lib/ConnectionFactory.php @@ -1,4 +1,5 @@ access->escapeFilterPart($search, true); - $isMemberUid = - ($this->ldapGroupMemberAssocAttr === 'memberuid' || - $this->ldapGroupMemberAssocAttr === 'zimbramailforwardingaddress'); + $isMemberUid + = ($this->ldapGroupMemberAssocAttr === 'memberuid' + || $this->ldapGroupMemberAssocAttr === 'zimbramailforwardingaddress'); //we need to apply the search filter //alternatives that need to be checked: @@ -1199,10 +1199,10 @@ class Group_LDAP extends ABackend implements GroupInterface, IGroupLDAP, IGetDis * compared with GroupInterface::CREATE_GROUP etc. */ public function implementsActions($actions): bool { - return (bool)((GroupInterface::COUNT_USERS | - GroupInterface::DELETE_GROUP | - GroupInterface::IS_ADMIN | - $this->groupPluginManager->getImplementedActions()) & $actions); + return (bool)((GroupInterface::COUNT_USERS + | GroupInterface::DELETE_GROUP + | GroupInterface::IS_ADMIN + | $this->groupPluginManager->getImplementedActions()) & $actions); } /** diff --git a/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php b/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php index d4a8f332362..8b63d54aa66 100644 --- a/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php +++ b/apps/user_ldap/lib/Handler/ExtStorageConfigHandler.php @@ -1,4 +1,5 @@ getOffset() + $this->getChunkSize(); + $newOffset = $reset ? 0 + : $this->getOffset() + $this->getChunkSize(); $this->ocConfig->setAppValue('user_ldap', 'cleanUpJobOffset', (string)$newOffset); } diff --git a/apps/user_ldap/lib/Migration/UUIDFix.php b/apps/user_ldap/lib/Migration/UUIDFix.php index 309910cdf0c..e853f3bba66 100644 --- a/apps/user_ldap/lib/Migration/UUIDFix.php +++ b/apps/user_ldap/lib/Migration/UUIDFix.php @@ -1,4 +1,5 @@ connection->getFromCache($cacheKey); // honoring profile disabled in config.php and check if user profile was refreshed - if ($this->config->getSystemValueBool('profile.enabled', true) && - ($profileCached === null) && // no cache or TTL not expired - !$this->wasRefreshed('profile')) { + if ($this->config->getSystemValueBool('profile.enabled', true) + && ($profileCached === null) // no cache or TTL not expired + && !$this->wasRefreshed('profile')) { // check current data $profileValues = []; //User Profile Field - Phone number diff --git a/apps/user_ldap/lib/UserPluginManager.php b/apps/user_ldap/lib/UserPluginManager.php index bbcf4157016..ed87fea6fde 100644 --- a/apps/user_ldap/lib/UserPluginManager.php +++ b/apps/user_ldap/lib/UserPluginManager.php @@ -1,4 +1,5 @@ access->userManager->getAttributes(); $users = $this->access->fetchUsersByLoginName($loginName, $attrs); if (count($users) < 1) { - throw new NotOnLDAP('No user available for the given login name on ' . - $this->access->connection->ldapHost . ':' . $this->access->connection->ldapPort); + throw new NotOnLDAP('No user available for the given login name on ' + . $this->access->connection->ldapHost . ':' . $this->access->connection->ldapPort); } return $users[0]; } @@ -142,8 +142,8 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I if (!$user instanceof User) { $this->logger->warning( - 'LDAP Login: Could not get user object for DN ' . $dn . - '. Maybe the LDAP entry has no set display name attribute?', + 'LDAP Login: Could not get user object for DN ' . $dn + . '. Maybe the LDAP entry has no set display name attribute?', ['app' => 'user_ldap'] ); return false; @@ -177,8 +177,8 @@ class User_LDAP extends BackendUtility implements IUserBackend, UserInterface, I $user = $this->access->userManager->get($uid); if (!$user instanceof User) { - throw new \Exception('LDAP setPassword: Could not get user object for uid ' . $uid . - '. Maybe the LDAP entry has no set display name attribute?'); + throw new \Exception('LDAP setPassword: Could not get user object for uid ' . $uid + . '. Maybe the LDAP entry has no set display name attribute?'); } if ($user->getUsername() !== false && $this->access->setPassword($user->getDN(), $password)) { $ldapDefaultPPolicyDN = $this->access->connection->ldapDefaultPPolicyDN; diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index 2739cdeba67..0d41f495ce9 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -415,11 +415,11 @@ class User_Proxy extends Proxy implements IUserBackend, UserInterface, IUserLDAP if ($search !== '') { $disabledUsers = array_filter( $disabledUsers, - fn (OfflineUser $user): bool => - mb_stripos($user->getOCName(), $search) !== false || - mb_stripos($user->getUID(), $search) !== false || - mb_stripos($user->getDisplayName(), $search) !== false || - mb_stripos($user->getEmail(), $search) !== false, + fn (OfflineUser $user): bool + => mb_stripos($user->getOCName(), $search) !== false + || mb_stripos($user->getUID(), $search) !== false + || mb_stripos($user->getDisplayName(), $search) !== false + || mb_stripos($user->getEmail(), $search) !== false, ); } return array_map( diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php index 6fe6c0c2906..15a9f9cb212 100644 --- a/apps/user_ldap/lib/Wizard.php +++ b/apps/user_ldap/lib/Wizard.php @@ -260,8 +260,8 @@ class Wizard extends LDAPUtility { $this->applyFind('ldap_email_attr', $winner); if ($writeLog) { $this->logger->info( - 'The mail attribute has automatically been reset, ' . - 'because the original value did not return any results.', + 'The mail attribute has automatically been reset, ' + . 'because the original value did not return any results.', ['app' => 'user_ldap'] ); } @@ -1209,8 +1209,8 @@ class Wizard extends LDAPUtility { //When looking for objectclasses, testing few entries is sufficient, $dig = 3; - $availableFeatures = - $this->cumulativeSearchOnAttribute($objectclasses, $attr, + $availableFeatures + = $this->cumulativeSearchOnAttribute($objectclasses, $attr, $dig, $maxEntryObjC); if (is_array($availableFeatures) && count($availableFeatures) > 0) { diff --git a/apps/user_ldap/lib/WizardResult.php b/apps/user_ldap/lib/WizardResult.php index 09aadd2b781..d6fd67d4204 100644 --- a/apps/user_ldap/lib/WizardResult.php +++ b/apps/user_ldap/lib/WizardResult.php @@ -20,7 +20,7 @@ class WizardResult { $this->changes[$key] = $value; } - + public function markChange() { $this->markedChange = true; } diff --git a/apps/user_ldap/tests/Integration/Bootstrap.php b/apps/user_ldap/tests/Integration/Bootstrap.php index 1e270aa6f8a..ef0909d4bea 100644 --- a/apps/user_ldap/tests/Integration/Bootstrap.php +++ b/apps/user_ldap/tests/Integration/Bootstrap.php @@ -1,4 +1,5 @@ getIsUserDefined() && - \in_array($userStatus->getStatus(), StatusService::PERSISTENT_STATUSES, true)) { + if ($userStatus->getIsUserDefined() + && \in_array($userStatus->getStatus(), StatusService::PERSISTENT_STATUSES, true)) { return; } diff --git a/apps/webhook_listeners/lib/Service/PHPMongoQuery.php b/apps/webhook_listeners/lib/Service/PHPMongoQuery.php index d2668d17644..ecb8e819780 100644 --- a/apps/webhook_listeners/lib/Service/PHPMongoQuery.php +++ b/apps/webhook_listeners/lib/Service/PHPMongoQuery.php @@ -41,7 +41,7 @@ abstract class PHPMongoQuery { } return $ret; } - + /** * Execute a Mongo query on a document * @@ -59,14 +59,14 @@ abstract class PHPMongoQuery { if ($options['_debug'] && $options['_shouldLog']) { $options['logger']->debug('executeQuery called', ['query' => $query, 'document' => $document, 'options' => $options]); } - + if (!is_array($query)) { return (bool)$query; } - + return self::_executeQuery($query, $document, $options); } - + /** * Internal execute query * @@ -145,7 +145,7 @@ abstract class PHPMongoQuery { return false; } } - + /** * Execute a query object on an element * @@ -163,7 +163,7 @@ abstract class PHPMongoQuery { } return true; } - + /** * Check if an operator is equal to a value * @@ -184,7 +184,7 @@ abstract class PHPMongoQuery { } return $operatorValue === $v; } - + /** * Execute a Mongo Operator on an element * @@ -199,11 +199,11 @@ abstract class PHPMongoQuery { if ($options['_debug'] && $options['_shouldLog']) { $options['logger']->debug('_executeOperatorOnElement called', ['operator' => $operator, 'operatorValue' => $operatorValue, 'element' => $element, 'document' => $document]); } - + if ($operator === '$not') { return !self::_executeQueryOnElement($operatorValue, $element, $document, $options); } - + $elementSpecifier = explode('.', $element); $v = & $document; $exists = true; @@ -230,7 +230,7 @@ abstract class PHPMongoQuery { break; } } - + switch ($operator) { case '$all': if (!$exists) { @@ -287,7 +287,7 @@ abstract class PHPMongoQuery { return count(array_intersect($v, $operatorValue)) === 0; } return !in_array($v, $operatorValue); - + case '$exists': return ($operatorValue && $exists) || (!$operatorValue && !$exists); case '$mod': if (!$exists) { @@ -300,12 +300,12 @@ abstract class PHPMongoQuery { throw new Exception('$mod requires two parameters in array: divisor and remainder'); } return $v % $operatorValue[0] === $operatorValue[1]; - + default: if (empty($options['unknownOperatorCallback']) || !is_callable($options['unknownOperatorCallback'])) { throw new Exception('Operator ' . $operator . ' is unknown'); } - + $res = call_user_func($options['unknownOperatorCallback'], $operator, $operatorValue, $element, $document); if ($res === null) { throw new Exception('Operator ' . $operator . ' is unknown'); @@ -317,7 +317,7 @@ abstract class PHPMongoQuery { } throw new Exception('Didn\'t return in switch'); } - + /** * Get the fields this query depends on * diff --git a/apps/workflowengine/appinfo/routes.php b/apps/workflowengine/appinfo/routes.php index ffafd0b91a8..48e5ed2ef4e 100644 --- a/apps/workflowengine/appinfo/routes.php +++ b/apps/workflowengine/appinfo/routes.php @@ -1,4 +1,5 @@ l->t('The given operator is invalid'), 1); } - if (in_array($operator, ['matches', '!matches']) && - @preg_match($value, null) === false) { + if (in_array($operator, ['matches', '!matches']) + && @preg_match($value, null) === false) { throw new \UnexpectedValueException($this->l->t('The given regular expression is invalid'), 2); } } diff --git a/apps/workflowengine/lib/Check/FileMimeType.php b/apps/workflowengine/lib/Check/FileMimeType.php index 3062994c6ba..a8dfa64528e 100644 --- a/apps/workflowengine/lib/Check/FileMimeType.php +++ b/apps/workflowengine/lib/Check/FileMimeType.php @@ -1,4 +1,5 @@ cacheAndReturnMimeType($this->storage->getId(), $this->path, $cacheEntry->getMimeType()); } - if ($this->storage->file_exists($this->path) && - $this->storage->filesize($this->path) && - $this->storage->instanceOfStorage(Local::class) + if ($this->storage->file_exists($this->path) + && $this->storage->filesize($this->path) + && $this->storage->instanceOfStorage(Local::class) ) { $path = $this->storage->getLocalFile($this->path); $mimeType = $this->mimeTypeDetector->detectContent($path); @@ -125,12 +126,12 @@ class FileMimeType extends AbstractStringCheck implements IFileCheck { */ protected function isWebDAVRequest() { return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && ( - $this->request->getPathInfo() === '/webdav' || - str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') || - $this->request->getPathInfo() === '/dav/files' || - str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/') || - $this->request->getPathInfo() === '/dav/uploads' || - str_starts_with($this->request->getPathInfo() ?? '', '/dav/uploads/') + $this->request->getPathInfo() === '/webdav' + || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') + || $this->request->getPathInfo() === '/dav/files' + || str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/') + || $this->request->getPathInfo() === '/dav/uploads' + || str_starts_with($this->request->getPathInfo() ?? '', '/dav/uploads/') ); } @@ -139,8 +140,8 @@ class FileMimeType extends AbstractStringCheck implements IFileCheck { */ protected function isPublicWebDAVRequest() { return substr($this->request->getScriptName(), 0 - strlen('/public.php')) === '/public.php' && ( - $this->request->getPathInfo() === '/webdav' || - str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') + $this->request->getPathInfo() === '/webdav' + || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') ); } diff --git a/apps/workflowengine/lib/Check/FileSize.php b/apps/workflowengine/lib/Check/FileSize.php index c1ee1d85ae9..5ee03ccc9cf 100644 --- a/apps/workflowengine/lib/Check/FileSize.php +++ b/apps/workflowengine/lib/Check/FileSize.php @@ -1,4 +1,5 @@ request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && ( - $this->request->getPathInfo() === '/webdav' || - str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') || - $this->request->getPathInfo() === '/dav/files' || - str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/') + $this->request->getPathInfo() === '/webdav' + || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/') + || $this->request->getPathInfo() === '/dav/files' + || str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/') ); } } diff --git a/apps/workflowengine/lib/Check/RequestUserAgent.php b/apps/workflowengine/lib/Check/RequestUserAgent.php index 47db1bb0c68..572ef567074 100644 --- a/apps/workflowengine/lib/Check/RequestUserAgent.php +++ b/apps/workflowengine/lib/Check/RequestUserAgent.php @@ -1,4 +1,5 @@ isSameColorComponent($firstColor['red'], $secondColor['red'], $allowedDelta) && - $this->isSameColorComponent($firstColor['green'], $secondColor['green'], $allowedDelta) && - $this->isSameColorComponent($firstColor['blue'], $secondColor['blue'], $allowedDelta) && - $this->isSameColorComponent($firstColor['alpha'], $secondColor['alpha'], $allowedDelta)) { + if ($this->isSameColorComponent($firstColor['red'], $secondColor['red'], $allowedDelta) + && $this->isSameColorComponent($firstColor['green'], $secondColor['green'], $allowedDelta) + && $this->isSameColorComponent($firstColor['blue'], $secondColor['blue'], $allowedDelta) + && $this->isSameColorComponent($firstColor['alpha'], $secondColor['alpha'], $allowedDelta)) { return true; } @@ -251,8 +252,8 @@ trait Avatar { } private function isSameColorComponent(int $firstColorComponent, int $secondColorComponent, int $allowedDelta) { - if ($firstColorComponent >= ($secondColorComponent - $allowedDelta) && - $firstColorComponent <= ($secondColorComponent + $allowedDelta)) { + if ($firstColorComponent >= ($secondColorComponent - $allowedDelta) + && $firstColorComponent <= ($secondColorComponent + $allowedDelta)) { return true; } diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php index a8c232d6fe7..ba219d5c602 100644 --- a/build/integration/features/bootstrap/BasicStructure.php +++ b/build/integration/features/bootstrap/BasicStructure.php @@ -1,4 +1,5 @@ response = $e->getResponse(); } } - - + + /** * @When Dropping file :path with :content as :nickName */ diff --git a/build/integration/features/bootstrap/LDAPContext.php b/build/integration/features/bootstrap/LDAPContext.php index f0181b36c71..986dced77a1 100644 --- a/build/integration/features/bootstrap/LDAPContext.php +++ b/build/integration/features/bootstrap/LDAPContext.php @@ -1,4 +1,5 @@ getRowsHash()); - if (!array_key_exists('uid_file_owner', $expectedFields) && - array_key_exists('uid_owner', $expectedFields)) { + if (!array_key_exists('uid_file_owner', $expectedFields) + && array_key_exists('uid_owner', $expectedFields)) { $expectedFields['uid_file_owner'] = $expectedFields['uid_owner']; } - if (!array_key_exists('displayname_file_owner', $expectedFields) && - array_key_exists('displayname_owner', $expectedFields)) { + if (!array_key_exists('displayname_file_owner', $expectedFields) + && array_key_exists('displayname_owner', $expectedFields)) { $expectedFields['displayname_file_owner'] = $expectedFields['displayname_owner']; } - if (array_key_exists('share_type', $expectedFields) && - $expectedFields['share_type'] == 10 /* IShare::TYPE_ROOM */ && - array_key_exists('share_with', $expectedFields)) { + if (array_key_exists('share_type', $expectedFields) + && $expectedFields['share_type'] == 10 /* IShare::TYPE_ROOM */ + && array_key_exists('share_with', $expectedFields)) { if ($expectedFields['share_with'] === 'private_conversation') { $expectedFields['share_with'] = 'REGEXP /^private_conversation_[0-9a-f]{6}$/'; } else { diff --git a/build/integration/features/bootstrap/SharingContext.php b/build/integration/features/bootstrap/SharingContext.php index cc6c243b4f1..fe4d3bb6bf1 100644 --- a/build/integration/features/bootstrap/SharingContext.php +++ b/build/integration/features/bootstrap/SharingContext.php @@ -1,4 +1,5 @@ getRowsHash() as $rowDisplayName => $row) { foreach ($tags as $key => $tag) { if ( - $tag['display-name'] === $rowDisplayName && - $tag['user-visible'] === $row[0] && - $tag['user-assignable'] === $row[1] + $tag['display-name'] === $rowDisplayName + && $tag['user-visible'] === $row[0] + && $tag['user-assignable'] === $row[1] ) { unset($tags[$key]); } diff --git a/build/integration/features/bootstrap/TalkContext.php b/build/integration/features/bootstrap/TalkContext.php index fe248e1af7c..6f351c30ccf 100644 --- a/build/integration/features/bootstrap/TalkContext.php +++ b/build/integration/features/bootstrap/TalkContext.php @@ -1,4 +1,5 @@ filterAuthors($authors); - + if ($gitRoot) { $authors = array_map([$this, 'checkCoreMailMap'], $authors); $authors = array_unique($authors); diff --git a/core/Command/App/Disable.php b/core/Command/App/Disable.php index a0a20ef21dd..121ad3f010c 100644 --- a/core/Command/App/Disable.php +++ b/core/Command/App/Disable.php @@ -1,4 +1,5 @@ rootView->is_dir($oldRoot . '/files_encryption') && - $this->targetExists($newRoot . '/files_encryption') === false + $this->rootView->is_dir($oldRoot . '/files_encryption') + && $this->targetExists($newRoot . '/files_encryption') === false ) { $this->rootView->rename($oldRoot . '/files_encryption', $newRoot . '/files_encryption'); } @@ -183,8 +183,8 @@ class ChangeKeyStorageRoot extends Command { $source = $oldRoot . '/' . $user . '/files_encryption'; $target = $newRoot . '/' . $user . '/files_encryption'; if ( - $this->rootView->is_dir($source) && - $this->targetExists($target) === false + $this->rootView->is_dir($source) + && $this->targetExists($target) === false ) { $this->prepareParentFolder($newRoot . '/' . $user); $this->rootView->rename($source, $target); diff --git a/core/Command/Encryption/EncryptAll.php b/core/Command/Encryption/EncryptAll.php index 684591f4586..f2c991471b6 100644 --- a/core/Command/Encryption/EncryptAll.php +++ b/core/Command/Encryption/EncryptAll.php @@ -1,4 +1,5 @@ rootView->file_get_contents($path); @@ -127,10 +127,10 @@ class MigrateKeyStorage extends Command { return (substr($haystack, -$length) === $needle); }; - if ($node['name'] === 'fileKey' || - $endsWith($node['name'], '.privateKey') || - $endsWith($node['name'], '.publicKey') || - $endsWith($node['name'], '.shareKey')) { + if ($node['name'] === 'fileKey' + || $endsWith($node['name'], '.privateKey') + || $endsWith($node['name'], '.publicKey') + || $endsWith($node['name'], '.shareKey')) { $path = $folder . '/' . $node['name']; $content = $this->rootView->file_get_contents($path); diff --git a/core/Command/Group/AddUser.php b/core/Command/Group/AddUser.php index 1f144b13893..999113390af 100644 --- a/core/Command/Group/AddUser.php +++ b/core/Command/Group/AddUser.php @@ -1,4 +1,5 @@ printErrors($output, $errors); // ignore the OS X setup warning - if (count($errors) !== 1 || - (string)$errors[0]['error'] !== 'Mac OS X is not supported and Nextcloud will not work properly on this platform. Use it at your own risk!') { + if (count($errors) !== 1 + || (string)$errors[0]['error'] !== 'Mac OS X is not supported and Nextcloud will not work properly on this platform. Use it at your own risk!') { return 1; } } diff --git a/core/Command/Maintenance/UpdateTheme.php b/core/Command/Maintenance/UpdateTheme.php index f819b9c8e58..3fbcb546cca 100644 --- a/core/Command/Maintenance/UpdateTheme.php +++ b/core/Command/Maintenance/UpdateTheme.php @@ -1,4 +1,5 @@ richTextFormatter->richToParsed($description, $descriptionParameters); } $output->writeln( - "\t\t" . - ($styleTag !== null ? "<{$styleTag}>" : '') . - "{$emoji} " . - ($check->getName() ?? $check::class) . - ($description !== null ? ': ' . $description : '') . - ($styleTag !== null ? "" : ''), + "\t\t" + . ($styleTag !== null ? "<{$styleTag}>" : '') + . "{$emoji} " + . ($check->getName() ?? $check::class) + . ($description !== null ? ': ' . $description : '') + . ($styleTag !== null ? "" : ''), $verbosity ); } diff --git a/core/Command/SystemTag/Add.php b/core/Command/SystemTag/Add.php index 92ed42c37bc..df8b507b07d 100644 --- a/core/Command/SystemTag/Add.php +++ b/core/Command/SystemTag/Add.php @@ -1,4 +1,5 @@ config->setAppValue('core', 'ai.taskprocessing_type_preferences', json_encode($taskTypeSettings)); $this->writeArrayInOutputFormat($input, $output, $taskTypeSettings); return 0; } catch (\JsonException $e) { throw new \JsonException('Error in TaskType DB entry'); } - + } } diff --git a/core/Command/TaskProcessing/GetCommand.php b/core/Command/TaskProcessing/GetCommand.php index a61ddbe1621..5c4fd17f2f8 100644 --- a/core/Command/TaskProcessing/GetCommand.php +++ b/core/Command/TaskProcessing/GetCommand.php @@ -1,4 +1,5 @@ config->getSystemValue('trusted_domains', []); if (empty($trustedDomains)) { $output->write( - 'The setting "trusted_domains" could not be ' . - 'set automatically by the upgrade script, ' . - 'please set it manually' + 'The setting "trusted_domains" could not be ' + . 'set automatically by the upgrade script, ' + . 'please set it manually' ); } } diff --git a/core/Command/User/AuthTokens/Delete.php b/core/Command/User/AuthTokens/Delete.php index f2c75a8ad99..2047d2eae2a 100644 --- a/core/Command/User/AuthTokens/Delete.php +++ b/core/Command/User/AuthTokens/Delete.php @@ -1,4 +1,5 @@ * SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/core/Controller/AvatarController.php b/core/Controller/AvatarController.php index 4e7a2f8714a..b577b2fd460 100644 --- a/core/Controller/AvatarController.php +++ b/core/Controller/AvatarController.php @@ -193,8 +193,8 @@ class AvatarController extends Controller { } } elseif (!is_null($files)) { if ( - $files['error'][0] === 0 && - is_uploaded_file($files['tmp_name'][0]) + $files['error'][0] === 0 + && is_uploaded_file($files['tmp_name'][0]) ) { if ($files['size'][0] > 20 * 1024 * 1024) { return new JSONResponse( diff --git a/core/Controller/ClientFlowLoginController.php b/core/Controller/ClientFlowLoginController.php index 57ea20071b6..4464af890c4 100644 --- a/core/Controller/ClientFlowLoginController.php +++ b/core/Controller/ClientFlowLoginController.php @@ -1,4 +1,5 @@ appName, 'error', [ - 'errors' => - [ + 'errors' + => [ [ 'error' => 'Access Forbidden', 'hint' => 'Invalid request', diff --git a/core/Controller/ContactsMenuController.php b/core/Controller/ContactsMenuController.php index f4ded1ed42b..d90ee8a1c61 100644 --- a/core/Controller/ContactsMenuController.php +++ b/core/Controller/ContactsMenuController.php @@ -1,4 +1,5 @@ session->close(); if ( - $this->request->getServerProtocol() === 'https' && - !$this->request->isUserAgent([Request::USER_AGENT_CHROME, Request::USER_AGENT_ANDROID_MOBILE_CHROME]) + $this->request->getServerProtocol() === 'https' + && !$this->request->isUserAgent([Request::USER_AGENT_CHROME, Request::USER_AGENT_ANDROID_MOBILE_CHROME]) ) { $response->addHeader('Clear-Site-Data', '"cache", "storage"'); } diff --git a/core/Controller/NavigationController.php b/core/Controller/NavigationController.php index 5fc929b4eb4..017061ef979 100644 --- a/core/Controller/NavigationController.php +++ b/core/Controller/NavigationController.php @@ -1,4 +1,5 @@ true, 'length' => 200, ]); - + $table->setPrimaryKey(['id']); $table->addIndex(['group_id'], 'admindel_groupid_idx'); return $schema; diff --git a/core/Migrations/Version25000Date20220515204012.php b/core/Migrations/Version25000Date20220515204012.php index 2ec96bc5175..7f7c6b6cee2 100644 --- a/core/Migrations/Version25000Date20220515204012.php +++ b/core/Migrations/Version25000Date20220515204012.php @@ -1,4 +1,5 @@ getTable('properties'); - if ($tableProperties->hasIndex('property_index') && - $tableProperties->hasIndex('properties_path_index')) { + if ($tableProperties->hasIndex('property_index') + && $tableProperties->hasIndex('properties_path_index')) { $tableProperties->dropIndex('property_index'); } diff --git a/core/Migrations/Version30000Date20240906095113.php b/core/Migrations/Version30000Date20240906095113.php index bab03241db4..7c3efe41bc3 100644 --- a/core/Migrations/Version30000Date20240906095113.php +++ b/core/Migrations/Version30000Date20240906095113.php @@ -31,7 +31,7 @@ class Version30000Date20240906095113 extends SimpleMigrationStep { if ($schema->hasTable('taskprocessing_tasks')) { $table = $schema->getTable('taskprocessing_tasks'); $column = $table->getColumn('error_message'); - + if ($column->getLength() < 4000) { $column->setLength(4000); } diff --git a/lib/base.php b/lib/base.php index 876d62c3596..8613ab62ef1 100644 --- a/lib/base.php +++ b/lib/base.php @@ -141,8 +141,8 @@ class OC { // Resolve /nextcloud to /nextcloud/ to ensure to always have a trailing // slash which is required by URL generation. - if (isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] === \OC::$WEBROOT && - substr($_SERVER['REQUEST_URI'], -1) !== '/') { + if (isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] === \OC::$WEBROOT + && substr($_SERVER['REQUEST_URI'], -1) !== '/') { header('Location: ' . \OC::$WEBROOT . '/'); exit(); } @@ -285,8 +285,8 @@ class OC { $tooBig = ($totalUsers > 50); } } - $ignoreTooBigWarning = isset($_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup']) && - $_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup'] === 'IAmSuperSureToDoThis'; + $ignoreTooBigWarning = isset($_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup']) + && $_GET['IKnowThatThisIsABigInstanceAndTheUpdateRequestCouldRunIntoATimeoutAndHowToRestoreABackup'] === 'IAmSuperSureToDoThis'; if ($disableWebUpdater || ($tooBig && !$ignoreTooBigWarning)) { // send http status 503 diff --git a/lib/private/Accounts/Hooks.php b/lib/private/Accounts/Hooks.php index 0235879e8e7..12f2b4777f8 100644 --- a/lib/private/Accounts/Hooks.php +++ b/lib/private/Accounts/Hooks.php @@ -1,4 +1,5 @@ isValidCommon() - && - $this->getSubject() !== '' + && $this->getSubject() !== '' ; } @@ -443,20 +442,16 @@ class Event implements IEvent { return $this->isValidCommon() - && - $this->getParsedSubject() !== '' + && $this->getParsedSubject() !== '' ; } protected function isValidCommon(): bool { return $this->getApp() !== '' - && - $this->getType() !== '' - && - $this->getAffectedUser() !== '' - && - $this->getTimestamp() !== 0 + && $this->getType() !== '' + && $this->getAffectedUser() !== '' + && $this->getTimestamp() !== 0 /** * Disabled for BC with old activities * && diff --git a/lib/private/Activity/EventMerger.php b/lib/private/Activity/EventMerger.php index 504f9088f24..0e7d318103a 100644 --- a/lib/private/Activity/EventMerger.php +++ b/lib/private/Activity/EventMerger.php @@ -1,4 +1,5 @@ getMinimumVersion(); $maxServerVersion = $serverVersion->getMaximumVersion(); $minFulfilled = $this->compareVersion->isCompatible($ncVersion, $minServerVersion, '>='); - $maxFulfilled = $maxServerVersion !== '' && - $this->compareVersion->isCompatible($ncVersion, $maxServerVersion, '<='); + $maxFulfilled = $maxServerVersion !== '' + && $this->compareVersion->isCompatible($ncVersion, $maxServerVersion, '<='); $isPhpCompatible = true; if (($release['rawPhpVersionSpec'] ?? '*') !== '*') { $phpVersion = $versionParser->getVersion($release['rawPhpVersionSpec']); diff --git a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php index d72f8fa7e24..d7857d41bee 100644 --- a/lib/private/App/AppStore/Fetcher/CategoryFetcher.php +++ b/lib/private/App/AppStore/Fetcher/CategoryFetcher.php @@ -1,4 +1,5 @@ isTyped(self::VALUE_MIXED, $currType) && - ($type | self::VALUE_SENSITIVE) !== ($currType | self::VALUE_SENSITIVE)) { + if (!$this->isTyped(self::VALUE_MIXED, $currType) + && ($type | self::VALUE_SENSITIVE) !== ($currType | self::VALUE_SENSITIVE)) { try { $currType = $this->convertTypeToString($currType); $type = $this->convertTypeToString($type); diff --git a/lib/private/AppFramework/Bootstrap/Coordinator.php b/lib/private/AppFramework/Bootstrap/Coordinator.php index 190244051d3..64e3dbfd928 100644 --- a/lib/private/AppFramework/Bootstrap/Coordinator.php +++ b/lib/private/AppFramework/Bootstrap/Coordinator.php @@ -178,7 +178,7 @@ class Coordinator { public function isBootable(string $appId) { $appNameSpace = App::buildAppNamespace($appId); $applicationClassName = $appNameSpace . '\\AppInfo\\Application'; - return class_exists($applicationClassName) && - in_array(IBootstrap::class, class_implements($applicationClassName), true); + return class_exists($applicationClassName) + && in_array(IBootstrap::class, class_implements($applicationClassName), true); } } diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index b6e2df4ce7b..87361a9d1ea 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -1,4 +1,5 @@ protocolVersion . ' ' . $status . ' ' . - $this->headers[$status]; + return $this->protocolVersion . ' ' . $status . ' ' + . $this->headers[$status]; } } diff --git a/lib/private/AppFramework/Middleware/FlowV2EphemeralSessionsMiddleware.php b/lib/private/AppFramework/Middleware/FlowV2EphemeralSessionsMiddleware.php index c30855a0e98..e4571dfc50e 100644 --- a/lib/private/AppFramework/Middleware/FlowV2EphemeralSessionsMiddleware.php +++ b/lib/private/AppFramework/Middleware/FlowV2EphemeralSessionsMiddleware.php @@ -33,8 +33,8 @@ class FlowV2EphemeralSessionsMiddleware extends Middleware { } if ( - $controller instanceof ClientFlowLoginV2Controller && - ($methodName === 'grantPage' || $methodName === 'generateAppPassword') + $controller instanceof ClientFlowLoginV2Controller + && ($methodName === 'grantPage' || $methodName === 'generateAppPassword') ) { return; } diff --git a/lib/private/AppFramework/Middleware/OCSMiddleware.php b/lib/private/AppFramework/Middleware/OCSMiddleware.php index 46612bf0d29..64f4b0054de 100644 --- a/lib/private/AppFramework/Middleware/OCSMiddleware.php +++ b/lib/private/AppFramework/Middleware/OCSMiddleware.php @@ -1,4 +1,5 @@ hasAnnotationOrAttribute($reflectionMethod, 'CORS', CORS::class) && - (!$this->hasAnnotationOrAttribute($reflectionMethod, 'PublicPage', PublicPage::class) || $this->session->isLoggedIn())) { + if ($this->hasAnnotationOrAttribute($reflectionMethod, 'CORS', CORS::class) + && (!$this->hasAnnotationOrAttribute($reflectionMethod, 'PublicPage', PublicPage::class) || $this->session->isLoggedIn())) { $user = array_key_exists('PHP_AUTH_USER', $this->request->server) ? $this->request->server['PHP_AUTH_USER'] : null; $pass = array_key_exists('PHP_AUTH_PW', $this->request->server) ? $this->request->server['PHP_AUTH_PW'] : null; @@ -134,10 +134,10 @@ class CORSMiddleware extends Middleware { // allow credentials headers must not be true or CSRF is possible // otherwise foreach ($response->getHeaders() as $header => $value) { - if (strtolower($header) === 'access-control-allow-credentials' && - strtolower(trim($value)) === 'true') { - $msg = 'Access-Control-Allow-Credentials must not be ' . - 'set to true in order to prevent CSRF'; + if (strtolower($header) === 'access-control-allow-credentials' + && strtolower(trim($value)) === 'true') { + $msg = 'Access-Control-Allow-Credentials must not be ' + . 'set to true in order to prevent CSRF'; throw new SecurityException($msg); } } diff --git a/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php b/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php index 646a5240bfc..53fbaaf5ed2 100644 --- a/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php +++ b/lib/private/AppFramework/Middleware/Security/Exceptions/AppNotEnabledException.php @@ -1,4 +1,5 @@ hasAnnotationOrAttribute($reflectionMethod, 'StrictCookieRequired', StrictCookiesRequired::class) || - !$this->hasAnnotationOrAttribute($reflectionMethod, 'NoCSRFRequired', NoCSRFRequired::class)) { + if ($this->hasAnnotationOrAttribute($reflectionMethod, 'StrictCookieRequired', StrictCookiesRequired::class) + || !$this->hasAnnotationOrAttribute($reflectionMethod, 'NoCSRFRequired', NoCSRFRequired::class)) { if (!$this->request->passesStrictCookieCheck()) { throw new StrictCookieMissingException(); } diff --git a/lib/private/AppFramework/OCS/BaseResponse.php b/lib/private/AppFramework/OCS/BaseResponse.php index 5929a3993ec..05ce133db24 100644 --- a/lib/private/AppFramework/OCS/BaseResponse.php +++ b/lib/private/AppFramework/OCS/BaseResponse.php @@ -1,4 +1,5 @@ getStatus(); - if ($status === Http::STATUS_NO_CONTENT || - $status === Http::STATUS_NOT_MODIFIED || - ($status >= 100 && $status <= 199)) { + if ($status === Http::STATUS_NO_CONTENT + || $status === Http::STATUS_NOT_MODIFIED + || ($status >= 100 && $status <= 199)) { // Those status codes are not supposed to have a body: // https://stackoverflow.com/q/8628725 return ''; diff --git a/lib/private/AppFramework/OCS/V1Response.php b/lib/private/AppFramework/OCS/V1Response.php index 131ca22ff24..1c2c25f5cb0 100644 --- a/lib/private/AppFramework/OCS/V1Response.php +++ b/lib/private/AppFramework/OCS/V1Response.php @@ -1,4 +1,5 @@ isInstantiable()) { return $this->buildClass($class); } else { - throw new QueryException($baseMsg . - ' Class can not be instantiated'); + throw new QueryException($baseMsg + . ' Class can not be instantiated'); } } catch (ReflectionException $e) { // Class does not exist diff --git a/lib/private/AppScriptDependency.php b/lib/private/AppScriptDependency.php index 380816f21ac..cc5ded0d011 100644 --- a/lib/private/AppScriptDependency.php +++ b/lib/private/AppScriptDependency.php @@ -1,4 +1,5 @@ session->exists(self::SESSION_UID_KEY)) { // Check if the session tells us it is 2FA authenticated already - if ($this->session->exists(self::SESSION_UID_DONE) && - $this->session->get(self::SESSION_UID_DONE) === $user->getUID()) { + if ($this->session->exists(self::SESSION_UID_DONE) + && $this->session->get(self::SESSION_UID_DONE) === $user->getUID()) { return false; } diff --git a/lib/private/Avatar/UserAvatar.php b/lib/private/Avatar/UserAvatar.php index 51c44b23a55..bef0a20e7b8 100644 --- a/lib/private/Avatar/UserAvatar.php +++ b/lib/private/Avatar/UserAvatar.php @@ -82,8 +82,8 @@ class UserAvatar extends Avatar { $img = new \OCP\Image(); if ( - (is_resource($data) && get_resource_type($data) === 'gd') || - (is_object($data) && get_class($data) === \GdImage::class) + (is_resource($data) && get_resource_type($data) === 'gd') + || (is_object($data) && get_class($data) === \GdImage::class) ) { $img->setResource($data); } elseif (is_resource($data)) { diff --git a/lib/private/Calendar/Manager.php b/lib/private/Calendar/Manager.php index 21370e74d54..0e2a3f5f679 100644 --- a/lib/private/Calendar/Manager.php +++ b/lib/private/Calendar/Manager.php @@ -236,7 +236,7 @@ class Manager implements IManager { $this->logger->warning('iMip message could not be processed because user has no calendars'); return false; } - + try { /** @var VCalendar $vObject|null */ $calendarObject = Reader::read($calendarData); diff --git a/lib/private/Collaboration/AutoComplete/Manager.php b/lib/private/Collaboration/AutoComplete/Manager.php index c4dd4093e69..cc5df78beea 100644 --- a/lib/private/Collaboration/AutoComplete/Manager.php +++ b/lib/private/Collaboration/AutoComplete/Manager.php @@ -1,4 +1,5 @@ shareeEnumeration) { - $reachedEnd = (count($result['wide']) < $offset + $limit) && - (count($userResults['wide']) < $offset + $limit); + $reachedEnd = (count($result['wide']) < $offset + $limit) + && (count($userResults['wide']) < $offset + $limit); $result['wide'] = array_slice($result['wide'], $offset, $limit); $userResults['wide'] = array_slice($userResults['wide'], $offset, $limit); diff --git a/lib/private/Collaboration/Collaborators/RemoteGroupPlugin.php b/lib/private/Collaboration/Collaborators/RemoteGroupPlugin.php index 89d5c4e4f79..f4c1793ea0a 100644 --- a/lib/private/Collaboration/Collaborators/RemoteGroupPlugin.php +++ b/lib/private/Collaboration/Collaborators/RemoteGroupPlugin.php @@ -1,4 +1,5 @@ shareeEnumerationFullMatch && - $lowerSearch !== '' && (strtolower($uid) === $lowerSearch || - strtolower($userDisplayName) === $lowerSearch || - ($this->shareeEnumerationFullMatchIgnoreSecondDisplayName && trim(strtolower(preg_replace('/ \(.*\)$/', '', $userDisplayName))) === $lowerSearch) || - ($this->shareeEnumerationFullMatchEmail && strtolower($userEmail ?? '') === $lowerSearch)) + $this->shareeEnumerationFullMatch + && $lowerSearch !== '' && (strtolower($uid) === $lowerSearch + || strtolower($userDisplayName) === $lowerSearch + || ($this->shareeEnumerationFullMatchIgnoreSecondDisplayName && trim(strtolower(preg_replace('/ \(.*\)$/', '', $userDisplayName))) === $lowerSearch) + || ($this->shareeEnumerationFullMatchEmail && strtolower($userEmail ?? '') === $lowerSearch)) ) { if (strtolower($uid) === $lowerSearch) { $foundUserById = true; @@ -169,8 +170,8 @@ class UserPlugin implements ISearchPlugin { ]; } else { $addToWideResults = false; - if ($this->shareeEnumeration && - !($this->shareeEnumerationInGroupOnly || $this->shareeEnumerationPhone)) { + if ($this->shareeEnumeration + && !($this->shareeEnumerationInGroupOnly || $this->shareeEnumerationPhone)) { $addToWideResults = true; } diff --git a/lib/private/Collaboration/Resources/Collection.php b/lib/private/Collaboration/Resources/Collection.php index cf5f7740ced..2481a3e9a09 100644 --- a/lib/private/Collaboration/Resources/Collection.php +++ b/lib/private/Collaboration/Resources/Collection.php @@ -164,8 +164,8 @@ class Collection implements ICollection { } protected function isSameResource(IResource $resource1, IResource $resource2): bool { - return $resource1->getType() === $resource2->getType() && - $resource1->getId() === $resource2->getId(); + return $resource1->getType() === $resource2->getType() + && $resource1->getId() === $resource2->getId(); } protected function removeCollection(): void { diff --git a/lib/private/Color.php b/lib/private/Color.php index e96d6fd23bd..d97c519e552 100644 --- a/lib/private/Color.php +++ b/lib/private/Color.php @@ -1,4 +1,5 @@ getDefinition(); $typeDef = $type->getDefinition(); diff --git a/lib/private/Console/Application.php b/lib/private/Console/Application.php index f896c0abebe..4cf1e0da8ca 100644 --- a/lib/private/Console/Application.php +++ b/lib/private/Console/Application.php @@ -74,8 +74,8 @@ class Application { if ($this->memoryInfo->isMemoryLimitSufficient() === false) { $output->getErrorOutput()->writeln( - 'The current PHP memory limit ' . - 'is below the recommended value of 512MB.' + 'The current PHP memory limit ' + . 'is below the recommended value of 512MB.' ); } diff --git a/lib/private/Contacts/ContactsMenu/ActionFactory.php b/lib/private/Contacts/ContactsMenu/ActionFactory.php index 71ebe575fdd..40037598d49 100644 --- a/lib/private/Contacts/ContactsMenu/ActionFactory.php +++ b/lib/private/Contacts/ContactsMenu/ActionFactory.php @@ -1,4 +1,5 @@ lastConnectionCheck[$this->getConnectionName()]) || - time() <= $this->lastConnectionCheck[$this->getConnectionName()] + 30 || - $this->isTransactionActive() + !isset($this->lastConnectionCheck[$this->getConnectionName()]) + || time() <= $this->lastConnectionCheck[$this->getConnectionName()] + 30 + || $this->isTransactionActive() ) { return; } diff --git a/lib/private/DB/MigrationService.php b/lib/private/DB/MigrationService.php index 2f4c8131d9f..40579c7a898 100644 --- a/lib/private/DB/MigrationService.php +++ b/lib/private/DB/MigrationService.php @@ -1,4 +1,5 @@ =') || - !str_contains($row, 'maria') && version_compare($row, '8.0', '>='); + return str_contains($row, 'maria') && version_compare($row, '10.3', '>=') + || !str_contains($row, 'maria') && version_compare($row, '8.0', '>='); } } diff --git a/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php b/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php index 559c29df208..52f82db2232 100644 --- a/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php +++ b/lib/private/DB/QueryBuilder/ExpressionBuilder/SqliteExpressionBuilder.php @@ -1,4 +1,5 @@ selects as $select) { foreach ($this->partitions as $partition) { if (is_string($select['select']) && ( - $select['select'] === '*' || - $partition->isColumnInPartition($select['select'])) + $select['select'] === '*' + || $partition->isColumnInPartition($select['select'])) ) { if (isset($this->splitQueries[$partition->name])) { if ($select['alias']) { diff --git a/lib/private/DB/SchemaWrapper.php b/lib/private/DB/SchemaWrapper.php index 473c0009237..0d5b2040513 100644 --- a/lib/private/DB/SchemaWrapper.php +++ b/lib/private/DB/SchemaWrapper.php @@ -1,4 +1,5 @@ start; } - + /** * @return float */ diff --git a/lib/private/DirectEditing/Manager.php b/lib/private/DirectEditing/Manager.php index 4823b6b4456..154002ef340 100644 --- a/lib/private/DirectEditing/Manager.php +++ b/lib/private/DirectEditing/Manager.php @@ -1,4 +1,5 @@ db->supports4ByteText() && - \class_exists(\IntlBreakIterator::class); + return $this->db->supports4ByteText() + && \class_exists(\IntlBreakIterator::class); } public function isValidSingleEmoji(string $emoji): bool { @@ -48,17 +48,17 @@ class EmojiHelper implements IEmojiHelper { if (strlen($emoji) >= 2) { // If the current code-point is an emoji or a modifier (like a skin-tone) // just continue and check the next character - if ($codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_SYMBOL || - $codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_LETTER || - $codePointType === \IntlChar::CHAR_CATEGORY_OTHER_SYMBOL || - $codePointType === \IntlChar::CHAR_CATEGORY_FORMAT_CHAR || // i.e. 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🏴󠁧󠁢󠁳󠁣󠁴󠁿 - $codePointType === \IntlChar::CHAR_CATEGORY_OTHER_PUNCTUATION || // i.e. ‼️ ⁉️ #⃣ - $codePointType === \IntlChar::CHAR_CATEGORY_LOWERCASE_LETTER || // i.e. ℹ️ - $codePointType === \IntlChar::CHAR_CATEGORY_MATH_SYMBOL || // i.e. ↔️ ◻️ ⤴️ ⤵️ - $codePointType === \IntlChar::CHAR_CATEGORY_ENCLOSING_MARK || // i.e. 0⃣..9⃣ - $codePointType === \IntlChar::CHAR_CATEGORY_DECIMAL_DIGIT_NUMBER || // i.e. 0⃣..9⃣ - $codePointType === \IntlChar::CHAR_CATEGORY_DASH_PUNCTUATION || // i.e. 〰️ - $codePointType === \IntlChar::CHAR_CATEGORY_GENERAL_OTHER_TYPES + if ($codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_SYMBOL + || $codePointType === \IntlChar::CHAR_CATEGORY_MODIFIER_LETTER + || $codePointType === \IntlChar::CHAR_CATEGORY_OTHER_SYMBOL + || $codePointType === \IntlChar::CHAR_CATEGORY_FORMAT_CHAR // i.e. 🏴󠁧󠁢󠁥󠁮󠁧󠁿 🏴󠁧󠁢󠁳󠁣󠁴󠁿 + || $codePointType === \IntlChar::CHAR_CATEGORY_OTHER_PUNCTUATION // i.e. ‼️ ⁉️ #⃣ + || $codePointType === \IntlChar::CHAR_CATEGORY_LOWERCASE_LETTER // i.e. ℹ️ + || $codePointType === \IntlChar::CHAR_CATEGORY_MATH_SYMBOL // i.e. ↔️ ◻️ ⤴️ ⤵️ + || $codePointType === \IntlChar::CHAR_CATEGORY_ENCLOSING_MARK // i.e. 0⃣..9⃣ + || $codePointType === \IntlChar::CHAR_CATEGORY_DECIMAL_DIGIT_NUMBER // i.e. 0⃣..9⃣ + || $codePointType === \IntlChar::CHAR_CATEGORY_DASH_PUNCTUATION // i.e. 〰️ + || $codePointType === \IntlChar::CHAR_CATEGORY_GENERAL_OTHER_TYPES ) { continue; } diff --git a/lib/private/Encryption/Keys/Storage.php b/lib/private/Encryption/Keys/Storage.php index 2c0ce9e5ef3..cce22b9138a 100644 --- a/lib/private/Encryption/Keys/Storage.php +++ b/lib/private/Encryption/Keys/Storage.php @@ -1,4 +1,5 @@ 1) { // detect alternative key storage root $rootDir = $this->getKeyStorageRoot(); - if ($rootDir !== '' && - str_starts_with(Filesystem::normalizePath($path), Filesystem::normalizePath($rootDir)) + if ($rootDir !== '' + && str_starts_with(Filesystem::normalizePath($path), Filesystem::normalizePath($rootDir)) ) { return true; } diff --git a/lib/private/Federation/CloudFederationFactory.php b/lib/private/Federation/CloudFederationFactory.php index f5f25d14ea1..d06de0f2f58 100644 --- a/lib/private/Federation/CloudFederationFactory.php +++ b/lib/private/Federation/CloudFederationFactory.php @@ -1,4 +1,5 @@ getDefaultRequestOptions(), ['body' => $payload]); - if ($this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_ENFORCED, lazy: true) && - $this->signatoryManager->getRemoteSignatory($this->signatureManager->extractIdentityFromUri($uri)) === null) { + if ($this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_ENFORCED, lazy: true) + && $this->signatoryManager->getRemoteSignatory($this->signatureManager->extractIdentityFromUri($uri)) === null) { return $payload; } diff --git a/lib/private/Federation/CloudFederationShare.php b/lib/private/Federation/CloudFederationShare.php index 3ec53d89ed3..2eb06b3acea 100644 --- a/lib/private/Federation/CloudFederationShare.php +++ b/lib/private/Federation/CloudFederationShare.php @@ -1,4 +1,5 @@ connection->getShardDefinition('filecache'); if ( - $shardDefinition && - $shardDefinition->getShardForKey($sourceCache->getNumericStorageId()) !== $shardDefinition->getShardForKey($this->getNumericStorageId()) + $shardDefinition + && $shardDefinition->getShardForKey($sourceCache->getNumericStorageId()) !== $shardDefinition->getShardForKey($this->getNumericStorageId()) ) { $this->moveFromStorageSharded($shardDefinition, $sourceCache, $sourceData, $targetPath); return; diff --git a/lib/private/Files/Cache/QuerySearchHelper.php b/lib/private/Files/Cache/QuerySearchHelper.php index ff2d6766893..3ddcf1ca4e6 100644 --- a/lib/private/Files/Cache/QuerySearchHelper.php +++ b/lib/private/Files/Cache/QuerySearchHelper.php @@ -1,4 +1,5 @@ getStorageId() !== $cachedMount->getStorageId() || - $newMount->getMountId() !== $cachedMount->getMountId() || - $newMount->getMountProvider() !== $cachedMount->getMountProvider() + $newMount->getStorageId() !== $cachedMount->getStorageId() + || $newMount->getMountId() !== $cachedMount->getMountId() + || $newMount->getMountProvider() !== $cachedMount->getMountProvider() ) { $changed[] = [$cachedMount, $newMount]; } diff --git a/lib/private/Files/Conversion/ConversionManager.php b/lib/private/Files/Conversion/ConversionManager.php index cf1085f66f0..2c98a4c6404 100644 --- a/lib/private/Files/Conversion/ConversionManager.php +++ b/lib/private/Files/Conversion/ConversionManager.php @@ -129,7 +129,7 @@ class ConversionManager implements IConversionManager { $this->preferredProviders[$class] = $this->serverContainer->get($class); continue; } - + $this->providers[$class] = $this->serverContainer->get($class); } catch (NotFoundExceptionInterface|ContainerExceptionInterface|Throwable $e) { $this->logger->error('Failed to load file conversion provider ' . $class, [ @@ -175,7 +175,7 @@ class ConversionManager implements IConversionManager { } } } - + return null; } } diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php index c41838fd6b0..7453b553119 100644 --- a/lib/private/Files/Node/Folder.php +++ b/lib/private/Files/Node/Folder.php @@ -1,4 +1,5 @@ getCache(); if ( - $sourceStorage->instanceOfStorage(ObjectStoreStorage::class) && - $sourceStorage->getObjectStore()->getStorageId() === $this->getObjectStore()->getStorageId() + $sourceStorage->instanceOfStorage(ObjectStoreStorage::class) + && $sourceStorage->getObjectStore()->getStorageId() === $this->getObjectStore()->getStorageId() ) { if ($this->getCache()->get($targetInternalPath)) { $this->unlink($targetInternalPath); diff --git a/lib/private/Files/ObjectStore/S3.php b/lib/private/Files/ObjectStore/S3.php index 23c061db174..72e1751e23d 100644 --- a/lib/private/Files/ObjectStore/S3.php +++ b/lib/private/Files/ObjectStore/S3.php @@ -1,4 +1,5 @@ getType() === ISearchBinaryOperator::OPERATOR_OR || - $operator->getType() === ISearchBinaryOperator::OPERATOR_AND + $operator->getType() === ISearchBinaryOperator::OPERATOR_OR + || $operator->getType() === ISearchBinaryOperator::OPERATOR_AND ) ) { $newArguments = []; diff --git a/lib/private/Files/Search/QueryOptimizer/FlattenSingleArgumentBinaryOperation.php b/lib/private/Files/Search/QueryOptimizer/FlattenSingleArgumentBinaryOperation.php index cb04351534a..7e99c04f197 100644 --- a/lib/private/Files/Search/QueryOptimizer/FlattenSingleArgumentBinaryOperation.php +++ b/lib/private/Files/Search/QueryOptimizer/FlattenSingleArgumentBinaryOperation.php @@ -16,11 +16,11 @@ class FlattenSingleArgumentBinaryOperation extends ReplacingOptimizerStep { public function processOperator(ISearchOperator &$operator): bool { parent::processOperator($operator); if ( - $operator instanceof ISearchBinaryOperator && - count($operator->getArguments()) === 1 && - ( - $operator->getType() === ISearchBinaryOperator::OPERATOR_OR || - $operator->getType() === ISearchBinaryOperator::OPERATOR_AND + $operator instanceof ISearchBinaryOperator + && count($operator->getArguments()) === 1 + && ( + $operator->getType() === ISearchBinaryOperator::OPERATOR_OR + || $operator->getType() === ISearchBinaryOperator::OPERATOR_AND ) ) { $operator = $operator->getArguments()[0]; diff --git a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php index 42d960cc22a..6df35c9c9a2 100644 --- a/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php +++ b/lib/private/Files/Search/QueryOptimizer/OrEqualsToIn.php @@ -18,8 +18,8 @@ use OCP\Files\Search\ISearchOperator; class OrEqualsToIn extends ReplacingOptimizerStep { public function processOperator(ISearchOperator &$operator): bool { if ( - $operator instanceof ISearchBinaryOperator && - $operator->getType() === ISearchBinaryOperator::OPERATOR_OR + $operator instanceof ISearchBinaryOperator + && $operator->getType() === ISearchBinaryOperator::OPERATOR_OR ) { $groups = $this->groupEqualsComparisonsByField($operator->getArguments()); $newParts = array_map(function (array $group) { diff --git a/lib/private/Files/Search/QueryOptimizer/PathPrefixOptimizer.php b/lib/private/Files/Search/QueryOptimizer/PathPrefixOptimizer.php index 9d50746d5d1..2994a9365a7 100644 --- a/lib/private/Files/Search/QueryOptimizer/PathPrefixOptimizer.php +++ b/lib/private/Files/Search/QueryOptimizer/PathPrefixOptimizer.php @@ -52,9 +52,9 @@ class PathPrefixOptimizer extends QueryOptimizerStep { private function operatorPairIsPathPrefix(ISearchOperator $like, ISearchOperator $equal): bool { return ( - $like instanceof ISearchComparison && $equal instanceof ISearchComparison && - !$like->getExtra() && !$equal->getExtra() && $like->getField() === 'path' && $equal->getField() === 'path' && - $like->getType() === ISearchComparison::COMPARE_LIKE_CASE_SENSITIVE && $equal->getType() === ISearchComparison::COMPARE_EQUAL + $like instanceof ISearchComparison && $equal instanceof ISearchComparison + && !$like->getExtra() && !$equal->getExtra() && $like->getField() === 'path' && $equal->getField() === 'path' + && $like->getType() === ISearchComparison::COMPARE_LIKE_CASE_SENSITIVE && $equal->getType() === ISearchComparison::COMPARE_EQUAL && $like->getValue() === SearchComparison::escapeLikeParameter($equal->getValue()) . '/%' ); } diff --git a/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php b/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php index 3e5258a715f..8aee1975708 100644 --- a/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php +++ b/lib/private/Files/Search/QueryOptimizer/SplitLargeIn.php @@ -18,9 +18,9 @@ use OCP\Files\Search\ISearchOperator; class SplitLargeIn extends ReplacingOptimizerStep { public function processOperator(ISearchOperator &$operator): bool { if ( - $operator instanceof ISearchComparison && - $operator->getType() === ISearchComparison::COMPARE_IN && - count($operator->getValue()) > 1000 + $operator instanceof ISearchComparison + && $operator->getType() === ISearchComparison::COMPARE_IN + && count($operator->getValue()) > 1000 ) { $chunks = array_chunk($operator->getValue(), 1000); $chunkComparisons = array_map(function (array $values) use ($operator) { diff --git a/lib/private/Files/Search/SearchBinaryOperator.php b/lib/private/Files/Search/SearchBinaryOperator.php index 59a1ba2dfaf..49f599933f4 100644 --- a/lib/private/Files/Search/SearchBinaryOperator.php +++ b/lib/private/Files/Search/SearchBinaryOperator.php @@ -1,4 +1,5 @@ $storage, 'mask' => Constants::PERMISSION_ALL & ~( - Constants::PERMISSION_UPDATE | - Constants::PERMISSION_CREATE | - Constants::PERMISSION_DELETE + Constants::PERMISSION_UPDATE + | Constants::PERMISSION_CREATE + | Constants::PERMISSION_DELETE ), ]); } diff --git a/lib/private/Files/SimpleFS/SimpleFile.php b/lib/private/Files/SimpleFS/SimpleFile.php index 0bfaea21788..d9c1b47d2f1 100644 --- a/lib/private/Files/SimpleFS/SimpleFile.php +++ b/lib/private/Files/SimpleFS/SimpleFile.php @@ -1,4 +1,5 @@ instanceOfStorage(Encryption::class) && - $this->isSameStorage($sourceStorage) + !$sourceStorage->instanceOfStorage(Encryption::class) + && $this->isSameStorage($sourceStorage) ) { // resolve any jailed paths while ($sourceStorage->instanceOfStorage(Jail::class)) { diff --git a/lib/private/Files/Storage/Wrapper/Encryption.php b/lib/private/Files/Storage/Wrapper/Encryption.php index 4d38d2d37aa..51a5f99908d 100644 --- a/lib/private/Files/Storage/Wrapper/Encryption.php +++ b/lib/private/Files/Storage/Wrapper/Encryption.php @@ -185,11 +185,11 @@ class Encryption extends Wrapper { public function rename(string $source, string $target): bool { $result = $this->storage->rename($source, $target); - if ($result && + if ($result // versions always use the keys from the original file, so we can skip // this step for versions - $this->isVersion($target) === false && - $this->encryptionManager->isEnabled()) { + && $this->isVersion($target) === false + && $this->encryptionManager->isEnabled()) { $sourcePath = $this->getFullPath($source); if (!$this->util->isExcluded($sourcePath)) { $targetPath = $this->getFullPath($target); @@ -210,9 +210,9 @@ class Encryption extends Wrapper { public function rmdir(string $path): bool { $result = $this->storage->rmdir($path); $fullPath = $this->getFullPath($path); - if ($result && - $this->util->isExcluded($fullPath) === false && - $this->encryptionManager->isEnabled() + if ($result + && $this->util->isExcluded($fullPath) === false + && $this->encryptionManager->isEnabled() ) { $this->keyStorage->deleteAllFileKeys($fullPath); } @@ -225,9 +225,9 @@ class Encryption extends Wrapper { $metaData = $this->getMetaData($path); if ( - !$this->is_dir($path) && - isset($metaData['encrypted']) && - $metaData['encrypted'] === true + !$this->is_dir($path) + && isset($metaData['encrypted']) + && $metaData['encrypted'] === true ) { $fullPath = $this->getFullPath($path); $module = $this->getEncryptionModule($path); @@ -384,9 +384,9 @@ class Encryption extends Wrapper { $size = $this->storage->filesize($path); $result = $unencryptedSize; - if ($unencryptedSize < 0 || - ($size > 0 && $unencryptedSize === $size) || - $unencryptedSize > $size + if ($unencryptedSize < 0 + || ($size > 0 && $unencryptedSize === $size) + || $unencryptedSize > $size ) { // check if we already calculate the unencrypted size for the // given path to avoid recursions @@ -634,8 +634,8 @@ class Encryption extends Wrapper { ): bool { // for versions we have nothing to do, because versions should always use the // key from the original file. Just create a 1:1 copy and done - if ($this->isVersion($targetInternalPath) || - $this->isVersion($sourceInternalPath)) { + if ($this->isVersion($targetInternalPath) + || $this->isVersion($sourceInternalPath)) { // remember that we try to create a version so that we can detect it during // fopen($sourceInternalPath) and by-pass the encryption in order to // create a 1:1 copy of the file diff --git a/lib/private/Files/Stream/Encryption.php b/lib/private/Files/Stream/Encryption.php index 0d55385820c..ef147ec421f 100644 --- a/lib/private/Files/Stream/Encryption.php +++ b/lib/private/Files/Stream/Encryption.php @@ -312,8 +312,8 @@ class Encryption extends Wrapper { // for seekable streams the pointer is moved back to the beginning of the encrypted block // flush will start writing there when the position moves to another block - $positionInFile = (int)floor($this->position / $this->unencryptedBlockSize) * - $this->util->getBlockSize() + $this->headerSize; + $positionInFile = (int)floor($this->position / $this->unencryptedBlockSize) + * $this->util->getBlockSize() + $this->headerSize; $resultFseek = $this->parentStreamSeek($positionInFile); // only allow writes on seekable streams, or at the end of the encrypted stream @@ -336,8 +336,8 @@ class Encryption extends Wrapper { // if $data doesn't fit the current block, the fill the current block and reiterate // after the block is filled, it is flushed and $data is updatedxxx } else { - $this->cache = substr($this->cache, 0, $blockPosition) . - substr($data, 0, $this->unencryptedBlockSize - $blockPosition); + $this->cache = substr($this->cache, 0, $blockPosition) + . substr($data, 0, $this->unencryptedBlockSize - $blockPosition); $this->flush(); $this->position += ($this->unencryptedBlockSize - $blockPosition); $length += ($this->unencryptedBlockSize - $blockPosition); diff --git a/lib/private/Files/Stream/SeekableHttpStream.php b/lib/private/Files/Stream/SeekableHttpStream.php index 5ed04ed9066..6ce0a880e8d 100644 --- a/lib/private/Files/Stream/SeekableHttpStream.php +++ b/lib/private/Files/Stream/SeekableHttpStream.php @@ -1,4 +1,5 @@ indexService === null || - $this->providerService === null || - $this->searchService === null) { + if ($this->indexService === null + || $this->providerService === null + || $this->searchService === null) { return false; } diff --git a/lib/private/FullTextSearch/Model/IndexDocument.php b/lib/private/FullTextSearch/Model/IndexDocument.php index 8bd20bad1e0..a51447393ed 100644 --- a/lib/private/FullTextSearch/Model/IndexDocument.php +++ b/lib/private/FullTextSearch/Model/IndexDocument.php @@ -512,8 +512,8 @@ class IndexDocument implements IIndexDocument, JsonSerializable { * @since 16.0.0 */ final public function addExcerpt(string $source, string $excerpt): IIndexDocument { - $this->excerpts[] = - [ + $this->excerpts[] + = [ 'source' => $source, 'excerpt' => $this->cleanExcerpt($excerpt) ]; diff --git a/lib/private/GlobalScale/Config.php b/lib/private/GlobalScale/Config.php index 02acc1ab50a..2f729c2702e 100644 --- a/lib/private/GlobalScale/Config.php +++ b/lib/private/GlobalScale/Config.php @@ -1,4 +1,5 @@ config->getSystemValueBool('allow_local_remote_servers', false)) { + if (($options['nextcloud']['allow_local_address'] ?? false) + || $this->config->getSystemValueBool('allow_local_remote_servers', false)) { return true; } diff --git a/lib/private/Http/Client/Response.php b/lib/private/Http/Client/Response.php index dc0b17ab075..1e4cb3b8fa2 100644 --- a/lib/private/Http/Client/Response.php +++ b/lib/private/Http/Client/Response.php @@ -21,9 +21,9 @@ class Response implements IResponse { } public function getBody() { - return $this->stream ? - $this->response->getBody()->detach(): - $this->response->getBody()->getContents(); + return $this->stream + ? $this->response->getBody()->detach() + :$this->response->getBody()->getContents(); } public function getStatusCode(): int { diff --git a/lib/private/Image.php b/lib/private/Image.php index 96699a0046b..3b8cb79c853 100644 --- a/lib/private/Image.php +++ b/lib/private/Image.php @@ -699,11 +699,11 @@ class Image implements IImage { fclose($fp); unset($fp); - $headerFormat = 'A4Riff/' . // get n string - 'I1Filesize/' . // get integer (file size but not actual size) - 'A4Webp/' . // get n string - 'A4Vp/' . // get n string - 'A74Chunk'; + $headerFormat = 'A4Riff/' // get n string + . 'I1Filesize/' // get integer (file size but not actual size) + . 'A4Webp/' // get n string + . 'A4Vp/' // get n string + . 'A74Chunk'; $header = unpack($headerFormat, $data); unset($data, $headerFormat); diff --git a/lib/private/L10N/Factory.php b/lib/private/L10N/Factory.php index 5645693f8d9..6a747744829 100644 --- a/lib/private/L10N/Factory.php +++ b/lib/private/L10N/Factory.php @@ -437,8 +437,8 @@ class Factory implements IFactory { } // Use language from request - if ($this->userSession->getUser() instanceof IUser && - $user->getUID() === $this->userSession->getUser()->getUID()) { + if ($this->userSession->getUser() instanceof IUser + && $user->getUID() === $this->userSession->getUser()->getUID()) { try { return $this->getLanguageFromRequest(); } catch (LanguageNotFoundException $e) { @@ -517,10 +517,10 @@ class Factory implements IFactory { // use formal version of german ("Sie" instead of "Du") if the default // language is set to 'de_DE' if possible if ( - is_string($defaultLanguage) && - strtolower($lang) === 'de' && - strtolower($defaultLanguage) === 'de_de' && - $this->languageExists($app, 'de_DE') + is_string($defaultLanguage) + && strtolower($lang) === 'de' + && strtolower($defaultLanguage) === 'de_de' + && $this->languageExists($app, 'de_DE') ) { $result = 'de_DE'; } diff --git a/lib/private/L10N/LanguageNotFoundException.php b/lib/private/L10N/LanguageNotFoundException.php index 31b08b2ec14..087a384e00e 100644 --- a/lib/private/L10N/LanguageNotFoundException.php +++ b/lib/private/L10N/LanguageNotFoundException.php @@ -1,4 +1,5 @@ getMethod() === 'PUT' && - !str_contains($request->getHeader('Content-Type'), 'application/x-www-form-urlencoded') && - !str_contains($request->getHeader('Content-Type'), 'application/json')) { + if ($request->getMethod() === 'PUT' + && !str_contains($request->getHeader('Content-Type'), 'application/x-www-form-urlencoded') + && !str_contains($request->getHeader('Content-Type'), 'application/json')) { return hash_equals($conditionSecret, ''); } diff --git a/lib/private/Log/ExceptionSerializer.php b/lib/private/Log/ExceptionSerializer.php index 6d94bf51f45..af7c9e48435 100644 --- a/lib/private/Log/ExceptionSerializer.php +++ b/lib/private/Log/ExceptionSerializer.php @@ -1,4 +1,5 @@ symfonyEmail->getHeaders(); - return $headers->has(AutoSubmitted::HEADER) ? - $headers->get(AutoSubmitted::HEADER)->getBodyAsString() : AutoSubmitted::VALUE_NO; + return $headers->has(AutoSubmitted::HEADER) + ? $headers->get(AutoSubmitted::HEADER)->getBodyAsString() : AutoSubmitted::VALUE_NO; } } diff --git a/lib/private/Mail/Provider/Manager.php b/lib/private/Mail/Provider/Manager.php index 61791620198..f162d30b834 100644 --- a/lib/private/Mail/Provider/Manager.php +++ b/lib/private/Mail/Provider/Manager.php @@ -17,7 +17,7 @@ use Psr\Log\LoggerInterface; use Throwable; class Manager implements IManager { - + protected ?array $providersCollection = null; public function __construct( @@ -63,7 +63,7 @@ class Manager implements IManager { * @return array collection of provider id and label ['jmap' => 'JMap Connector'] */ public function types(): array { - + // construct types collection $types = []; // extract id and name from providers collection @@ -72,7 +72,7 @@ class Manager implements IManager { } // return types collection return $types; - + } /** @@ -131,7 +131,7 @@ class Manager implements IManager { if (!is_array($this->providersCollection)) { $this->providers(); } - + if (isset($this->providersCollection[$providerId])) { return $this->providersCollection[$providerId]; } @@ -150,7 +150,7 @@ class Manager implements IManager { * @return array> collection of provider id, service id and object ['jmap' => ['Service1' => IServiceObject]] */ public function services(string $userId): array { - + // initilize collection $services = []; // retrieve and iterate through mail providers @@ -164,7 +164,7 @@ class Manager implements IManager { } // return collection return $services; - + } /** @@ -179,7 +179,7 @@ class Manager implements IManager { * @return IService|null returns service object or null if none found */ public function findServiceById(string $userId, string $serviceId, ?string $providerId = null): ?IService { - + // evaluate if provider id was specified if ($providerId !== null) { // find provider @@ -204,7 +204,7 @@ class Manager implements IManager { } } } - + // return null if no match was found return null; @@ -223,7 +223,7 @@ class Manager implements IManager { * @return IService|null returns service object or null if none found */ public function findServiceByAddress(string $userId, string $address, ?string $providerId = null): ?IService { - + // evaluate if provider id was specified if ($providerId !== null) { // find provider diff --git a/lib/private/Memcache/APCu.php b/lib/private/Memcache/APCu.php index 024462d227b..937f8a863ab 100644 --- a/lib/private/Memcache/APCu.php +++ b/lib/private/Memcache/APCu.php @@ -1,4 +1,5 @@ profiler->add($cache); } - if ($this->lockingCacheClass === Redis::class && - $this->logFile !== '' && is_writable(dirname($this->logFile)) && (!file_exists($this->logFile) || is_writable($this->logFile))) { + if ($this->lockingCacheClass === Redis::class + && $this->logFile !== '' && is_writable(dirname($this->logFile)) && (!file_exists($this->logFile) || is_writable($this->logFile))) { $cache = new LoggerWrapperCache($cache, $this->logFile); } return $cache; diff --git a/lib/private/Memcache/Memcached.php b/lib/private/Memcache/Memcached.php index 620013feda6..d8b624a978a 100644 --- a/lib/private/Memcache/Memcached.php +++ b/lib/private/Memcache/Memcached.php @@ -1,4 +1,5 @@ getConfig()->getSystemValue('memcached_options', []); if (is_array($options)) { diff --git a/lib/private/Memcache/NullCache.php b/lib/private/Memcache/NullCache.php index b667869bf0d..eac1e6ddadc 100644 --- a/lib/private/Memcache/NullCache.php +++ b/lib/private/Memcache/NullCache.php @@ -1,4 +1,5 @@ isValidCommon() - && - $this->getSubject() !== '' + && $this->getSubject() !== '' ; } @@ -456,8 +455,7 @@ class Notification implements INotification { return $this->isValidCommon() - && - $this->getParsedSubject() !== '' + && $this->getParsedSubject() !== '' ; } @@ -468,14 +466,10 @@ class Notification implements INotification { return $this->getApp() !== '' - && - $this->getUser() !== '' - && - $this->getDateTime()->getTimestamp() !== 0 - && - $this->getObjectType() !== '' - && - $this->getObjectId() !== '' + && $this->getUser() !== '' + && $this->getDateTime()->getTimestamp() !== 0 + && $this->getObjectType() !== '' + && $this->getObjectId() !== '' ; } } diff --git a/lib/private/Preview/Bundled.php b/lib/private/Preview/Bundled.php index 836dc4bd357..6100e8262a4 100644 --- a/lib/private/Preview/Bundled.php +++ b/lib/private/Preview/Bundled.php @@ -1,4 +1,5 @@ urlGenerator->getAbsoluteURL($path); } } - + // Previously, we used to pass this through Theming // But it was only used to colour icons containing // 0082c9. Since with vue we moved to inline svg icons, diff --git a/lib/private/Preview/SGI.php b/lib/private/Preview/SGI.php index 06ea9c0c69a..78b1ea5828a 100644 --- a/lib/private/Preview/SGI.php +++ b/lib/private/Preview/SGI.php @@ -1,4 +1,5 @@ isProfileFieldVisible($property, $targetUser, $visitingUser) + $profileParameters[$property] + = $this->isProfileFieldVisible($property, $targetUser, $visitingUser) // Explicitly set to null when value is empty string ? ($account->getProperty($property)->getValue() ?: null) : null; diff --git a/lib/private/RedisFactory.php b/lib/private/RedisFactory.php index dcb56cee9ef..f13f9299c1c 100644 --- a/lib/private/RedisFactory.php +++ b/lib/private/RedisFactory.php @@ -152,8 +152,8 @@ class RedisFactory { } public function isAvailable(): bool { - return \extension_loaded('redis') && - \version_compare(\phpversion('redis'), self::REDIS_MINIMAL_VERSION, '>='); + return \extension_loaded('redis') + && \version_compare(\phpversion('redis'), self::REDIS_MINIMAL_VERSION, '>='); } /** @@ -163,7 +163,7 @@ class RedisFactory { * @return boolean */ private function isConnectionParametersSupported(): bool { - return \extension_loaded('redis') && - \version_compare(\phpversion('redis'), self::REDIS_EXTRA_PARAMETERS_MINIMAL_VERSION, '>='); + return \extension_loaded('redis') + && \version_compare(\phpversion('redis'), self::REDIS_EXTRA_PARAMETERS_MINIMAL_VERSION, '>='); } } diff --git a/lib/private/Remote/Api/ApiBase.php b/lib/private/Remote/Api/ApiBase.php index dff3edb51b9..b2f96fb3c24 100644 --- a/lib/private/Remote/Api/ApiBase.php +++ b/lib/private/Remote/Api/ApiBase.php @@ -1,4 +1,5 @@ executeQuery( - 'SELECT DISTINCT(TABLE_NAME) AS `table`' . - ' FROM INFORMATION_SCHEMA . COLUMNS' . - ' WHERE TABLE_SCHEMA = ?' . - " AND (COLLATION_NAME <> '" . $characterSet . "_bin' OR CHARACTER_SET_NAME <> '" . $characterSet . "')" . - " AND TABLE_NAME LIKE '*PREFIX*%'", + 'SELECT DISTINCT(TABLE_NAME) AS `table`' + . ' FROM INFORMATION_SCHEMA . COLUMNS' + . ' WHERE TABLE_SCHEMA = ?' + . " AND (COLLATION_NAME <> '" . $characterSet . "_bin' OR CHARACTER_SET_NAME <> '" . $characterSet . "')" + . " AND TABLE_NAME LIKE '*PREFIX*%'", [$dbName] ); $rows = $statement->fetchAll(); @@ -112,11 +112,11 @@ class Collation implements IRepairStep { // fetch tables by collation $statement = $connection->executeQuery( - 'SELECT DISTINCT(TABLE_NAME) AS `table`' . - ' FROM INFORMATION_SCHEMA . TABLES' . - ' WHERE TABLE_SCHEMA = ?' . - " AND TABLE_COLLATION <> '" . $characterSet . "_bin'" . - " AND TABLE_NAME LIKE '*PREFIX*%'", + 'SELECT DISTINCT(TABLE_NAME) AS `table`' + . ' FROM INFORMATION_SCHEMA . TABLES' + . ' WHERE TABLE_SCHEMA = ?' + . " AND TABLE_COLLATION <> '" . $characterSet . "_bin'" + . " AND TABLE_NAME LIKE '*PREFIX*%'", [$dbName] ); $rows = $statement->fetchAll(); diff --git a/lib/private/Repair/MoveUpdaterStepFile.php b/lib/private/Repair/MoveUpdaterStepFile.php index eb9f78b0a39..bb8f9d3acfc 100644 --- a/lib/private/Repair/MoveUpdaterStepFile.php +++ b/lib/private/Repair/MoveUpdaterStepFile.php @@ -1,4 +1,5 @@ updateMimetypes($updatedMimetypes); } - + /** * Check if there are any migrations available diff --git a/lib/private/Security/Hasher.php b/lib/private/Security/Hasher.php index ba661f5a356..722fdab902f 100644 --- a/lib/private/Security/Hasher.php +++ b/lib/private/Security/Hasher.php @@ -106,8 +106,8 @@ class Hasher implements IHasher { // Verify whether it matches a legacy PHPass or SHA1 string $hashLength = \strlen($hash); - if (($hashLength === 60 && password_verify($message . $this->legacySalt, $hash)) || - ($hashLength === 40 && hash_equals($hash, sha1($message)))) { + if (($hashLength === 60 && password_verify($message . $this->legacySalt, $hash)) + || ($hashLength === 40 && hash_equals($hash, sha1($message)))) { $newHash = $this->hash($message); return true; } @@ -115,8 +115,8 @@ class Hasher implements IHasher { // Verify whether it matches a legacy PHPass or SHA1 string // Retry with empty passwordsalt for cases where it was not set $hashLength = \strlen($hash); - if (($hashLength === 60 && password_verify($message, $hash)) || - ($hashLength === 40 && hash_equals($hash, sha1($message)))) { + if (($hashLength === 60 && password_verify($message, $hash)) + || ($hashLength === 40 && hash_equals($hash, sha1($message)))) { $newHash = $this->hash($message); return true; } diff --git a/lib/private/Security/Signature/Model/SignedRequest.php b/lib/private/Security/Signature/Model/SignedRequest.php index f30935e83b1..12a43f32bcc 100644 --- a/lib/private/Security/Signature/Model/SignedRequest.php +++ b/lib/private/Security/Signature/Model/SignedRequest.php @@ -74,8 +74,8 @@ class SignedRequest implements ISignedRequest, JsonSerializable { */ public function getDigest(): string { if ($this->digest === '') { - $this->digest = $this->digestAlgorithm->value . '=' . - base64_encode(hash($this->digestAlgorithm->getHashingAlgorithm(), $this->body, true)); + $this->digest = $this->digestAlgorithm->value . '=' + . base64_encode(hash($this->digestAlgorithm->getHashingAlgorithm(), $this->body, true)); } return $this->digest; } diff --git a/lib/private/Security/VerificationToken/VerificationToken.php b/lib/private/Security/VerificationToken/VerificationToken.php index 1995b482597..89f45180359 100644 --- a/lib/private/Security/VerificationToken/VerificationToken.php +++ b/lib/private/Security/VerificationToken/VerificationToken.php @@ -85,9 +85,9 @@ class VerificationToken implements IVerificationToken { ): string { $token = $this->secureRandom->generate( 21, - ISecureRandom::CHAR_DIGITS . - ISecureRandom::CHAR_LOWER . - ISecureRandom::CHAR_UPPER + ISecureRandom::CHAR_DIGITS + . ISecureRandom::CHAR_LOWER + . ISecureRandom::CHAR_UPPER ); $tokenValue = $this->timeFactory->getTime() . ':' . $token; $encryptedValue = $this->crypto->encrypt($tokenValue, $passwordPrefix . $this->config->getSystemValueString('secret')); diff --git a/lib/private/Settings/Manager.php b/lib/private/Settings/Manager.php index c96c04f34ff..78dc64c3c3f 100644 --- a/lib/private/Settings/Manager.php +++ b/lib/private/Settings/Manager.php @@ -1,4 +1,5 @@ $this->l10n->t( - 'Mac OS X is not supported and %s will not work properly on this platform. ' . - 'Use it at your own risk!', + 'Mac OS X is not supported and %s will not work properly on this platform. ' + . 'Use it at your own risk!', [$this->defaults->getProductName()] ), 'hint' => $this->l10n->t('For the best results, please consider using a GNU/Linux server instead.'), @@ -198,8 +198,8 @@ class Setup { if ($this->iniWrapper->getString('open_basedir') !== '' && PHP_INT_SIZE === 4) { $errors[] = [ 'error' => $this->l10n->t( - 'It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. ' . - 'This will lead to problems with files over 4 GB and is highly discouraged.', + 'It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. ' + . 'This will lead to problems with files over 4 GB and is highly discouraged.', [$this->defaults->getProductName()] ), 'hint' => $this->l10n->t('Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP.'), diff --git a/lib/private/Share/Share.php b/lib/private/Share/Share.php index 56a4c6410c5..1121d71e45f 100644 --- a/lib/private/Share/Share.php +++ b/lib/private/Share/Share.php @@ -133,8 +133,8 @@ class Share extends Constants { // for file/folder shares we need to compare file_source, otherwise we compare item_source // only group shares if they already point to the same target, otherwise the file where shared // before grouping of shares was added. In this case we don't group them to avoid confusions - if (($fileSharing && $item['file_source'] === $r['file_source'] && $item['file_target'] === $r['file_target']) || - (!$fileSharing && $item['item_source'] === $r['item_source'] && $item['item_target'] === $r['item_target'])) { + if (($fileSharing && $item['file_source'] === $r['file_source'] && $item['file_target'] === $r['file_target']) + || (!$fileSharing && $item['item_source'] === $r['item_source'] && $item['item_target'] === $r['item_target'])) { // add the first item to the list of grouped shares if (!isset($result[$key]['grouped'])) { $result[$key]['grouped'][] = $result[$key]; diff --git a/lib/private/Share20/Exception/BackendError.php b/lib/private/Share20/Exception/BackendError.php index 60f7dcc1a17..b2585367727 100644 --- a/lib/private/Share20/Exception/BackendError.php +++ b/lib/private/Share20/Exception/BackendError.php @@ -1,4 +1,5 @@ getShareType(); $sharedWith = ''; - if ($shareType === IShare::TYPE_USER || - $shareType === IShare::TYPE_GROUP || - $shareType === IShare::TYPE_REMOTE) { + if ($shareType === IShare::TYPE_USER + || $shareType === IShare::TYPE_GROUP + || $shareType === IShare::TYPE_REMOTE) { $sharedWith = $share->getSharedWith(); } diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index 174f0e5c3aa..01664c6a0a3 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -182,8 +182,8 @@ class Manager implements IManager { } // Cannot share with yourself - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === $share->getSharedBy()) { + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === $share->getSharedBy()) { throw new \InvalidArgumentException($this->l->t('Cannot share with yourself')); } @@ -193,8 +193,8 @@ class Manager implements IManager { } // And it should be a file or a folder - if (!($share->getNode() instanceof \OCP\Files\File) && - !($share->getNode() instanceof \OCP\Files\Folder)) { + if (!($share->getNode() instanceof \OCP\Files\File) + && !($share->getNode() instanceof \OCP\Files\Folder)) { throw new \InvalidArgumentException($this->l->t('Shared path must be either a file or a folder')); } @@ -251,8 +251,8 @@ class Manager implements IManager { // Link shares are allowed to have no read permissions to allow upload to hidden folders $noReadPermissionRequired = $share->getShareType() === IShare::TYPE_LINK || $share->getShareType() === IShare::TYPE_EMAIL; - if (!$noReadPermissionRequired && - ($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) { + if (!$noReadPermissionRequired + && ($share->getPermissions() & \OCP\Constants::PERMISSION_READ) === 0) { throw new \InvalidArgumentException($this->l->t('Shares need at least read permissions')); } @@ -561,8 +561,8 @@ class Manager implements IManager { } // Check if public upload is allowed - if ($share->getNodeType() === 'folder' && !$this->shareApiLinkAllowPublicUpload() && - ($share->getPermissions() & (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE))) { + if ($share->getNodeType() === 'folder' && !$this->shareApiLinkAllowPublicUpload() + && ($share->getPermissions() & (\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE | \OCP\Constants::PERMISSION_DELETE))) { throw new \InvalidArgumentException($this->l->t('Public upload is not allowed')); } } @@ -698,8 +698,8 @@ class Manager implements IManager { } // Cannot share with the owner - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === $share->getShareOwner()) { + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === $share->getShareOwner()) { throw new \InvalidArgumentException($this->l->t('Cannot share with the share owner')); } @@ -791,14 +791,14 @@ class Manager implements IManager { } // We can only change the recipient on user shares - if ($share->getSharedWith() !== $originalShare->getSharedWith() && - $share->getShareType() !== IShare::TYPE_USER) { + if ($share->getSharedWith() !== $originalShare->getSharedWith() + && $share->getShareType() !== IShare::TYPE_USER) { throw new \InvalidArgumentException($this->l->t('Can only update recipient on user shares')); } // Cannot share with the owner - if ($share->getShareType() === IShare::TYPE_USER && - $share->getSharedWith() === $share->getShareOwner()) { + if ($share->getShareType() === IShare::TYPE_USER + && $share->getSharedWith() === $share->getShareOwner()) { throw new \InvalidArgumentException($this->l->t('Cannot share with the share owner')); } @@ -949,11 +949,11 @@ class Manager implements IManager { * @return boolean whether the password was updated or not. */ private function updateSharePasswordIfNeeded(IShare $share, IShare $originalShare) { - $passwordsAreDifferent = ($share->getPassword() !== $originalShare->getPassword()) && - (($share->getPassword() !== null && $originalShare->getPassword() === null) || - ($share->getPassword() === null && $originalShare->getPassword() !== null) || - ($share->getPassword() !== null && $originalShare->getPassword() !== null && - !$this->hasher->verify($share->getPassword(), $originalShare->getPassword()))); + $passwordsAreDifferent = ($share->getPassword() !== $originalShare->getPassword()) + && (($share->getPassword() !== null && $originalShare->getPassword() === null) + || ($share->getPassword() === null && $originalShare->getPassword() !== null) + || ($share->getPassword() !== null && $originalShare->getPassword() !== null + && !$this->hasher->verify($share->getPassword(), $originalShare->getPassword()))); // Password updated. if ($passwordsAreDifferent) { @@ -1237,9 +1237,9 @@ class Manager implements IManager { * @inheritdoc */ public function getSharesBy($userId, $shareType, $path = null, $reshares = false, $limit = 50, $offset = 0, bool $onlyValid = true) { - if ($path !== null && - !($path instanceof \OCP\Files\File) && - !($path instanceof \OCP\Files\Folder)) { + if ($path !== null + && !($path instanceof \OCP\Files\File) + && !($path instanceof \OCP\Files\Folder)) { throw new \InvalidArgumentException($this->l->t('Invalid path')); } @@ -1798,8 +1798,8 @@ class Manager implements IManager { * @return bool */ public function shareApiLinkDefaultExpireDateEnforced() { - return $this->shareApiLinkDefaultExpireDate() && - $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'no') === 'yes'; + return $this->shareApiLinkDefaultExpireDate() + && $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'no') === 'yes'; } @@ -1836,8 +1836,8 @@ class Manager implements IManager { * @return bool */ public function shareApiInternalDefaultExpireDateEnforced(): bool { - return $this->shareApiInternalDefaultExpireDate() && - $this->config->getAppValue('core', 'shareapi_enforce_internal_expire_date', 'no') === 'yes'; + return $this->shareApiInternalDefaultExpireDate() + && $this->config->getAppValue('core', 'shareapi_enforce_internal_expire_date', 'no') === 'yes'; } /** @@ -1846,8 +1846,8 @@ class Manager implements IManager { * @return bool */ public function shareApiRemoteDefaultExpireDateEnforced(): bool { - return $this->shareApiRemoteDefaultExpireDate() && - $this->config->getAppValue('core', 'shareapi_enforce_remote_expire_date', 'no') === 'yes'; + return $this->shareApiRemoteDefaultExpireDate() + && $this->config->getAppValue('core', 'shareapi_enforce_remote_expire_date', 'no') === 'yes'; } /** @@ -1915,13 +1915,13 @@ class Manager implements IManager { } public function limitEnumerationToGroups(): bool { - return $this->allowEnumeration() && - $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_group', 'no') === 'yes'; + return $this->allowEnumeration() + && $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_group', 'no') === 'yes'; } public function limitEnumerationToPhone(): bool { - return $this->allowEnumeration() && - $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_phone', 'no') === 'yes'; + return $this->allowEnumeration() + && $this->config->getAppValue('core', 'shareapi_restrict_user_enumeration_to_phone', 'no') === 'yes'; } public function allowEnumerationFullMatch(): bool { diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php index eba3f4f26f1..d920edfd90e 100644 --- a/lib/private/Share20/ProviderFactory.php +++ b/lib/private/Share20/ProviderFactory.php @@ -174,9 +174,9 @@ class ProviderFactory implements IProviderFactory { public function getProviderForType($shareType) { $provider = null; - if ($shareType === IShare::TYPE_USER || - $shareType === IShare::TYPE_GROUP || - $shareType === IShare::TYPE_LINK + if ($shareType === IShare::TYPE_USER + || $shareType === IShare::TYPE_GROUP + || $shareType === IShare::TYPE_LINK ) { $provider = $this->defaultShareProvider(); } elseif ($shareType === IShare::TYPE_REMOTE || $shareType === IShare::TYPE_REMOTE_GROUP) { diff --git a/lib/private/Share20/Share.php b/lib/private/Share20/Share.php index e0e46fb7886..8caabb0898a 100644 --- a/lib/private/Share20/Share.php +++ b/lib/private/Share20/Share.php @@ -420,8 +420,8 @@ class Share implements IShare { * @inheritdoc */ public function isExpired() { - return $this->getExpirationDate() !== null && - $this->getExpirationDate() <= new \DateTime(); + return $this->getExpirationDate() !== null + && $this->getExpirationDate() <= new \DateTime(); } /** @@ -633,7 +633,7 @@ class Share implements IShare { if ($allowViewWithoutDownload) { return true; } - + // No "allow preview" header set, so we must check if // the share has not explicitly disabled download permissions $attributes = $this->getAttributes(); diff --git a/lib/private/Share20/ShareAttributes.php b/lib/private/Share20/ShareAttributes.php index 96da1e336e3..f90fbd9c6cd 100644 --- a/lib/private/Share20/ShareAttributes.php +++ b/lib/private/Share20/ShareAttributes.php @@ -32,8 +32,8 @@ class ShareAttributes implements IAttributes { * @inheritdoc */ public function getAttribute(string $scope, string $key): mixed { - if (\array_key_exists($scope, $this->attributes) && - \array_key_exists($key, $this->attributes[$scope])) { + if (\array_key_exists($scope, $this->attributes) + && \array_key_exists($key, $this->attributes[$scope])) { return $this->attributes[$scope][$key]; } return null; diff --git a/lib/private/Share20/ShareHelper.php b/lib/private/Share20/ShareHelper.php index d4a54f1d687..3f6bab98a7f 100644 --- a/lib/private/Share20/ShareHelper.php +++ b/lib/private/Share20/ShareHelper.php @@ -1,4 +1,5 @@ getSubscription(); - if ($subscription instanceof ISubscription && - $subscription->hasValidSubscription()) { + if ($subscription instanceof ISubscription + && $subscription->hasValidSubscription()) { $userLimitReached = $subscription->isHardUserLimitReached(); if ($userLimitReached && $notificationManager instanceof IManager) { $this->notifyAboutReachedUserLimit($notificationManager); diff --git a/lib/private/TaskProcessing/SynchronousBackgroundJob.php b/lib/private/TaskProcessing/SynchronousBackgroundJob.php index de3b424176c..19c53d59932 100644 --- a/lib/private/TaskProcessing/SynchronousBackgroundJob.php +++ b/lib/private/TaskProcessing/SynchronousBackgroundJob.php @@ -59,8 +59,8 @@ class SynchronousBackgroundJob extends QueuedJob { // check if this job needs to be scheduled again: // if there is at least one preferred synchronous provider that has a scheduled task - $synchronousProviders = array_filter($providers, fn ($provider) => - $provider instanceof ISynchronousProvider); + $synchronousProviders = array_filter($providers, fn ($provider) + => $provider instanceof ISynchronousProvider); $synchronousPreferredProviders = array_filter($synchronousProviders, function ($provider) { $taskTypeId = $provider->getTaskTypeId(); $preferredProvider = $this->taskProcessingManager->getPreferredProvider($taskTypeId); diff --git a/lib/private/Teams/TeamManager.php b/lib/private/Teams/TeamManager.php index d75b0209c71..13d6cc459a9 100644 --- a/lib/private/Teams/TeamManager.php +++ b/lib/private/Teams/TeamManager.php @@ -1,4 +1,5 @@ config->setAppValue('core', 'vendor', $currentVendor); @@ -176,13 +176,13 @@ class Updater extends BasicEmitter { if ($currentVendor === 'nextcloud') { return isset($allowedPreviousVersions[$currentVendor][$majorMinor]) - && (version_compare($oldVersion, $newVersion, '<=') || - $this->config->getSystemValueBool('debug', false)); + && (version_compare($oldVersion, $newVersion, '<=') + || $this->config->getSystemValueBool('debug', false)); } // Check if the instance can be migrated - return isset($allowedPreviousVersions[$currentVendor][$majorMinor]) || - isset($allowedPreviousVersions[$currentVendor][$oldVersion]); + return isset($allowedPreviousVersions[$currentVendor][$majorMinor]) + || isset($allowedPreviousVersions[$currentVendor][$oldVersion]); } /** diff --git a/lib/private/User/Listeners/UserChangedListener.php b/lib/private/User/Listeners/UserChangedListener.php index 983a4e81233..8f618950255 100644 --- a/lib/private/User/Listeners/UserChangedListener.php +++ b/lib/private/User/Listeners/UserChangedListener.php @@ -28,7 +28,7 @@ class UserChangedListener implements IEventListener { if (!($event instanceof UserChangedEvent)) { return; } - + $user = $event->getUser(); $feature = $event->getFeature(); $oldValue = $event->getOldValue(); diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index 229f3138e6d..097fd9a0dc8 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -320,9 +320,9 @@ class Manager extends PublicEmitter implements IUserManager { $users, function (IUser $user) use ($search): bool { try { - return mb_stripos($user->getUID(), $search) !== false || - mb_stripos($user->getDisplayName(), $search) !== false || - mb_stripos($user->getEMailAddress() ?? '', $search) !== false; + return mb_stripos($user->getUID(), $search) !== false + || mb_stripos($user->getDisplayName(), $search) !== false + || mb_stripos($user->getEMailAddress() ?? '', $search) !== false; } catch (NoUserException $ex) { $this->logger->error('Error while filtering disabled users', ['exception' => $ex, 'userUID' => $user->getUID()]); return false; diff --git a/lib/private/User/Session.php b/lib/private/User/Session.php index a638cd24557..95e4b6e4a87 100644 --- a/lib/private/User/Session.php +++ b/lib/private/User/Session.php @@ -1,4 +1,5 @@ themeExist('getShortFooter')) { $footer = $this->theme->getShortFooter(); } else { - $footer = '' . $this->getEntity() . '' . - ' – ' . $this->getSlogan(); + $footer = '' . $this->getEntity() . '' + . ' – ' . $this->getSlogan(); } return $footer; diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php index 41ac787aa80..948dfcf7926 100644 --- a/lib/private/legacy/OC_Util.php +++ b/lib/private/legacy/OC_Util.php @@ -479,8 +479,8 @@ class OC_Util { * TODO: Should probably be implemented in the above generic dependency * check somehow in the long-term. */ - if ($iniWrapper->getBool('mbstring.func_overload') !== null && - $iniWrapper->getBool('mbstring.func_overload') === true) { + if ($iniWrapper->getBool('mbstring.func_overload') !== null + && $iniWrapper->getBool('mbstring.func_overload') === true) { $errors[] = [ 'error' => $l->t('mbstring.func_overload is set to %s instead of the expected value 0.', [$iniWrapper->getString('mbstring.func_overload')]), 'hint' => $l->t('To fix this issue set mbstring.func_overload to 0 in your php.ini.') diff --git a/lib/public/Accounts/PropertyDoesNotExistException.php b/lib/public/Accounts/PropertyDoesNotExistException.php index d0f10cdf12f..1d27ef1df30 100644 --- a/lib/public/Accounts/PropertyDoesNotExistException.php +++ b/lib/public/Accounts/PropertyDoesNotExistException.php @@ -1,4 +1,5 @@ getTrace() as $step) { - if (isset($step['class'], $step['function'], $step['args'][0]) && - $step['class'] === ServerContainer::class && - $step['function'] === 'query' && - $step['args'][0] === $applicationClassName) { + if (isset($step['class'], $step['function'], $step['args'][0]) + && $step['class'] === ServerContainer::class + && $step['function'] === 'query' + && $step['args'][0] === $applicationClassName) { $setUpViaQuery = true; break; - } elseif (isset($step['class'], $step['function'], $step['args'][0]) && - $step['class'] === ServerContainer::class && - $step['function'] === 'getAppContainer' && - $step['args'][1] === $classNameParts[1]) { + } elseif (isset($step['class'], $step['function'], $step['args'][0]) + && $step['class'] === ServerContainer::class + && $step['function'] === 'getAppContainer' + && $step['args'][1] === $classNameParts[1]) { $setUpViaQuery = true; break; - } elseif (isset($step['class'], $step['function'], $step['args'][0]) && - $step['class'] === SimpleContainer::class && - preg_match('/{closure:OC\\\\AppFramework\\\\Utility\\\\SimpleContainer::buildClass\\(\\):\\d+}/', $step['function']) && - $step['args'][0] === $this) { + } elseif (isset($step['class'], $step['function'], $step['args'][0]) + && $step['class'] === SimpleContainer::class + && preg_match('/{closure:OC\\\\AppFramework\\\\Utility\\\\SimpleContainer::buildClass\\(\\):\\d+}/', $step['function']) + && $step['args'][0] === $this) { /* We are setup through a lazy ghost, fine */ $setUpViaQuery = true; break; diff --git a/lib/public/AppFramework/Controller.php b/lib/public/AppFramework/Controller.php index 7c25b3382e7..cdeaac99366 100644 --- a/lib/public/AppFramework/Controller.php +++ b/lib/public/AppFramework/Controller.php @@ -135,7 +135,7 @@ abstract class Controller { return $responder($response); } - throw new \DomainException('No responder registered for format ' . - $format . '!'); + throw new \DomainException('No responder registered for format ' + . $format . '!'); } } diff --git a/lib/public/AppFramework/Db/Entity.php b/lib/public/AppFramework/Db/Entity.php index a44a9a8bced..3094070af5f 100644 --- a/lib/public/AppFramework/Db/Entity.php +++ b/lib/public/AppFramework/Db/Entity.php @@ -159,8 +159,8 @@ abstract class Entity { if (property_exists($this, $name)) { return $this->$name; } else { - throw new \BadFunctionCallException($name . - ' is not a valid attribute'); + throw new \BadFunctionCallException($name + . ' is not a valid attribute'); } } @@ -180,8 +180,8 @@ abstract class Entity { } elseif ($this->isGetterForBoolProperty($methodName)) { return $this->getter(lcfirst(substr($methodName, 2))); } else { - throw new \BadFunctionCallException($methodName . - ' does not exist'); + throw new \BadFunctionCallException($methodName + . ' does not exist'); } } diff --git a/lib/public/AppFramework/Db/QBMapper.php b/lib/public/AppFramework/Db/QBMapper.php index 4071a4a47a4..7fb5b2a9afd 100644 --- a/lib/public/AppFramework/Db/QBMapper.php +++ b/lib/public/AppFramework/Db/QBMapper.php @@ -296,8 +296,8 @@ abstract class QBMapper { * @since 14.0.0 */ private function buildDebugMessage(string $msg, IQueryBuilder $sql): string { - return $msg . - ': query "' . $sql->getSQL() . '"; '; + return $msg + . ': query "' . $sql->getSQL() . '"; '; } diff --git a/lib/public/AppFramework/Http/FileDisplayResponse.php b/lib/public/AppFramework/Http/FileDisplayResponse.php index fda160eafc5..c18404b7d91 100644 --- a/lib/public/AppFramework/Http/FileDisplayResponse.php +++ b/lib/public/AppFramework/Http/FileDisplayResponse.php @@ -1,4 +1,5 @@ session->get('public_link_authenticated_token') === $this->getToken() && - $this->session->get('public_link_authenticated_password_hash') === $this->getPasswordHash()) { + if ($this->session->get('public_link_authenticated_token') === $this->getToken() + && $this->session->get('public_link_authenticated_password_hash') === $this->getPasswordHash()) { return true; } diff --git a/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php b/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php index 835fd1eac9d..6ca8e68ed95 100644 --- a/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php +++ b/lib/public/Authentication/Exceptions/CredentialsUnavailableException.php @@ -1,4 +1,5 @@ getType()) ? '' : ' (' . $this->getType()->value . ')'; - return empty($this->getName()) ? - 'Addition of a new column' . $type . ' to table \'' . $this->getTable() . '\'' + return empty($this->getName()) + ? 'Addition of a new column' . $type . ' to table \'' . $this->getTable() . '\'' : 'Addition of column \'' . $this->getName() . '\'' . $type . ' to table \'' . $this->getTable() . '\''; } } diff --git a/lib/public/Migration/Attributes/DropColumn.php b/lib/public/Migration/Attributes/DropColumn.php index 1de0ba58489..a1cd5790cc7 100644 --- a/lib/public/Migration/Attributes/DropColumn.php +++ b/lib/public/Migration/Attributes/DropColumn.php @@ -22,8 +22,8 @@ class DropColumn extends ColumnMigrationAttribute { * @since 30.0.0 */ public function definition(): string { - return empty($this->getName()) ? - 'Deletion of a column from table \'' . $this->getTable() . '\'' + return empty($this->getName()) + ? 'Deletion of a column from table \'' . $this->getTable() . '\'' : 'Deletion of column \'' . $this->getName() . '\' from table \'' . $this->getTable() . '\''; } } diff --git a/lib/public/Migration/Attributes/ModifyColumn.php b/lib/public/Migration/Attributes/ModifyColumn.php index ef7250ffb34..6fc44ebb824 100644 --- a/lib/public/Migration/Attributes/ModifyColumn.php +++ b/lib/public/Migration/Attributes/ModifyColumn.php @@ -23,8 +23,8 @@ class ModifyColumn extends ColumnMigrationAttribute { */ public function definition(): string { $type = is_null($this->getType()) ? '' : ' to ' . $this->getType()->value; - return empty($this->getName()) ? - 'Modification of a column from table \'' . $this->getTable() . '\'' . $type + return empty($this->getName()) + ? 'Modification of a column from table \'' . $this->getTable() . '\'' . $type : 'Modification of column \'' . $this->getName() . '\' from table \'' . $this->getTable() . '\'' . $type; } } diff --git a/lib/public/OCM/ICapabilityAwareOCMProvider.php b/lib/public/OCM/ICapabilityAwareOCMProvider.php index d3ad2e29932..ae290abd2f8 100644 --- a/lib/public/OCM/ICapabilityAwareOCMProvider.php +++ b/lib/public/OCM/ICapabilityAwareOCMProvider.php @@ -21,7 +21,7 @@ interface ICapabilityAwareOCMProvider extends IOCMProvider { * @since 32.0.0 */ public function getCapabilities(): array; - + /** * get the provider name * @@ -29,7 +29,7 @@ interface ICapabilityAwareOCMProvider extends IOCMProvider { * @since 32.0.0 */ public function getProvider(): string; - + /** * returns the invite accept dialog * @@ -37,7 +37,7 @@ interface ICapabilityAwareOCMProvider extends IOCMProvider { * @since 32.0.0 */ public function getInviteAcceptDialog(): string; - + /** * set the capabilities * diff --git a/lib/public/Remote/Api/IApiCollection.php b/lib/public/Remote/Api/IApiCollection.php index da1964997bd..e7181ab20f2 100644 --- a/lib/public/Remote/Api/IApiCollection.php +++ b/lib/public/Remote/Api/IApiCollection.php @@ -1,4 +1,5 @@ - [ + 'errors' + => [ [ 'error' => 'Access Forbidden', 'hint' => 'Invalid request', diff --git a/tests/Core/Controller/CssControllerTest.php b/tests/Core/Controller/CssControllerTest.php index cae6f7989c4..b4764d6ea3a 100644 --- a/tests/Core/Controller/CssControllerTest.php +++ b/tests/Core/Controller/CssControllerTest.php @@ -1,4 +1,5 @@ connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', ['userDelete', 'appDelete', 'keyDelete', 'valueDelete'] ); @@ -254,8 +255,8 @@ class AllConfigTest extends \Test\TestCase { $connectionMock = $this->createMock(IDBConnection::class); $connectionMock->expects($this->once()) ->method('executeQuery') - ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences` ' . - 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'), + ->with($this->equalTo('SELECT `configvalue` FROM `*PREFIX*preferences` ' + . 'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ?'), $this->equalTo(['userSetUnchanged', 'appSetUnchanged', 'keySetUnchanged'])) ->willReturn($resultMock); $connectionMock->expects($this->never()) @@ -319,8 +320,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } @@ -345,8 +346,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } @@ -383,8 +384,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } @@ -424,8 +425,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } @@ -458,8 +459,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } @@ -504,8 +505,8 @@ class AllConfigTest extends \Test\TestCase { ]; foreach ($data as $entry) { $this->connection->executeUpdate( - 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' . - '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', + 'INSERT INTO `*PREFIX*preferences` (`userid`, `appid`, ' + . '`configkey`, `configvalue`) VALUES (?, ?, ?, ?)', $entry ); } diff --git a/tests/lib/App/AppStore/Bundles/BundleBase.php b/tests/lib/App/AppStore/Bundles/BundleBase.php index 28fb8a7736b..71acaa052b3 100644 --- a/tests/lib/App/AppStore/Bundles/BundleBase.php +++ b/tests/lib/App/AppStore/Bundles/BundleBase.php @@ -1,4 +1,5 @@ =9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/juliushaertl/direct_menu/releases/download/v0.9.2/direct_menu.tar.gz","created":"2016-10-06T14:01:05.578297Z","licenses":["agpl"],"lastModified":"2016-10-06T14:01:05.643813Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"ERBS9G5bZ3vwCizz2Ht5DehsVJmb63bzF3aYcH7xjbDVMPagOFWdUAiLDwTeZR1n\ni4gdZ73J/IjHQQJoOPwtCjgbZgLPFqL5x13CLUO9mb/33dZe/+gqEDc/3AuJ4TlA\nXUdLxHRb1bwIlJOwuSr/E24452VG20WUhLXBoM0Zm7WcMxvJWo2zAWnuqnLX3dy9\ncPB4PX+6JU2lUMINj8OYQmM1QnqvjG8YV0cYHbBbnSicOGwXEnni7mojsC8T0cn7\nYEJ2O2iO9hh3fvFEXUzDcL7tDQ5bZqm63Oa991bsAJxFo/RbzeJRh//DcOrd8Ufn\nu2SqRhwybS8j4YvfjAL9RPdRfPLwf6X2gx/Y6QFrKHH0QMI/9J/ZFyoUQcqKbsHV\n85O+yuWoqVmza71tkp4n9PuMdprCinaVvHbHbNGUf2SIh9BWuEQuVvvnvB+ZW8XY\n+Cl+unzk3WgOgT0iY3uEmsQcrLIo4DSKhcNgD1NS13fR/JTSavvmOqBarUMFZfVC\nbkR1DTBCyDjdpNBidpa3/26675dz5IT5Zedp4BBBREQzX08cIhJx5mgqDdX3CU09\nuWtzoaLi71/1BWTFAN+Y9VyfZ8/Z3Pg3vKedRJ565mztIj0geL3riEsC5YnPS0+C\n+a3B9sDiiOa101EORzX3lrPqL7reEPdCxrIwN+hKFBQ=","translations":{}}],"screenshots":[{"url":"https://bitgrid.net/~jus/direct_menu_nc.png"}],"translations":{"en":{"name":"Direct Menu","summary":"Provide easy access to all apps in the header.","description":"Provide easy access to all apps in the header."}},"isFeatured":false,"authors":[{"name":"Julius Härtl","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEBjCCAu4CAhADMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwOTE0MTI1MDU0WhcNMjYxMjIxMTI1MDU0WjAWMRQwEgYD\r\nVQQDDAtkaXJlY3RfbWVudTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\r\nAMkzWsAkKP/40ktvJMpnr0IJNVoPOR0hvh24igcDskL1WKiD2eiRUenj5LE0Nvn+\r\nsiGmWsAqRVpdiz+Y8ghQqQMzKi43IrRN0AxlCrHWrSqBZT3wIAUcFz4RzEoFxc1N\r\nUZzWma6ljukGnvt4V1ZyT+H/cjqxUkBhh/y9SS0jUen1a1grND6Rw54X46V2dlCu\r\nFH+pLsfPJJGw+QLeTGHn7dqdv18cYMAlWDCzPixVnNiCXHZcUtKMmstU2xU4R2e6\r\nzimp2rgkE4TNHrafpjH8xGdNi2FG5Dmokob/L5Q2r8jyNaW7UsFfrvLTRj371b3/\r\n2FhhxoGUvDzaG2An02Exwm52LJfdTVMHAMPZub5poHfy5vAEdZGPQ/m02l8ZK/Y2\r\n7yT807GlfPMXfdfjCxR6wNtmv7rvBDdrUZmIRNJfpFSdvlH/+MOTWnabyfQv2K4Q\r\nBIwltX6Elh0lh4ntvt1ZVtvFv+PL1Dc7QLV+w19+/LJA0mnsh7GIFYKFlbA65gA0\r\nc/w+uqDy0+5MxkR9WGPpd79KRA1tKWTis4Ny1lApK5y3zIsVGa3DfBHXcwqkWHbV\r\nwIpyuyyDsFtC1b9LTFONX7iU9cbNk5C5GTM331MdA2kLcD/D5k42GNTBSca7MkPx\r\nFx/ETSn0Ct167el30symf2AxvXjw+mBYPN71rVTMDwe9AgMBAAEwDQYJKoZIhvcN\r\nAQELBQADggEBAC0fJKnbEhXA8M283jA9GxABxLyTBcQyVVNnz2L/bYYNi81Y9iZv\r\n+U0S3qaIfoqNcV9FTKAutbsKvWyolnI7MRRK6feNuFfoP2jKubM1CnawpyT/RF2Q\r\ne/zxnB1EmeI2X5D2xceJDLB7Fy5W0EGrLixRIdFaSUommWFUm9E2hSIaNlziSBdc\r\n1J/mOQeNYO5zg5ouEt1rzQW4Mhh1I2uNQmGe4ip+Jl/2LAv3FZuu4NrSEcoXH3ro\r\nG2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M+Ug81AqiY7XjdiaCPdh0Tthcx\r\n2OmWZo7UBREWenjKyFZZ/iKoqH5sdenBtpo=\r\n-----END CERTIFICATE-----"},{"id":"apporder","categories":["customization"],"userDocs":"","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/juliushaertl/apporder/issues","website":"","created":"2016-10-01T09:16:47.111889Z","lastModified":"2016-10-12T19:50:16.038821Z","releases":[{"version":"0.3.3","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/juliushaertl/apporder/releases/download/0.3.3/apporder.tar.gz","created":"2016-10-12T19:14:10.802359Z","licenses":["agpl"],"lastModified":"2016-10-12T19:50:16.104357Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"nhlT9lhrmBxIsqh/e3RLm2NDw/U8ZvvoMyYQTLMM3H19DQmVcPYPYC9QWVTsowUzXblVaOXVGylbpKma9yOlOAqJtF3qyXecLl4+tA/Awb6BBhKPgHFdcLDAL5yy1K7/uei3SgEojMlJoI9vEK5I1C5YTh43yNH+//Im6MAuNYFUTlMXK426zdOe6ogpCI5GlYdXopqYANxcpT+WXWET6DDSM5Ev+MYwMcSAY4r8+tvARRU4ZAenRgjkBT6R5z6cD76emRax14tbV6vkjjwRcO+dQtM0tFPbd+5fsNInbauv50VzIMgjA6RnKTOI17gRsSdGlsV4vZn2aIxEPWauu6T/UohMvAE9HMn13vtbpPBSFwJAktj6yHASYGzupNQLprA0+OdyALoLZPpQAKNEXA42a4EVISBKu0EmduHJlUPeqhnIGkkGgVNWS8AWqzP2nFoPdXBgUWateiMcBTHxgEKDac5YmNc9lsXpzf1OxBaXHBhGYKuXPwIfyH3jTWb1OdwixJEuRe9dl63T9qOTRre8QWns/bMqKLibGfMtFhVB21ARJayBuX70eVvabG/2N7Y5t1zUlFygIKu51tvo3AVCRDdRrFWDvkAjxzIz5FIdALVZ+DReFYu/r4WF/w3V9rInFuEDSwb/OH4r8sQycs07tSlMyA74Y3FpjKTBxso=","translations":{}},{"version":"0.3.2","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/juliushaertl/apporder/releases/download/0.3.2/apporder.tar.gz","created":"2016-10-06T14:00:51.532409Z","licenses":["agpl"],"lastModified":"2016-10-06T14:00:51.598455Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"gRVFOtj9414ZNSdRH/qNB2SwVZUQh+gaFnNLFjjXjJ1MdRMCISzvwb+QU1qYuK/y\nuL8K0pn1+fFQf8A3VsC2pb6yaLQ5U9C3Guf886Flf4qtYw1P8UWRA9yOJ+6Md+PH\n6pTEiDIdm4xbmM0KkBhsE5kL8dvLIq4EwwcAh2Qq8fjytzAk1YiP+KrTaYrVwskM\nDmm0lgP4NVnjRBTX9myW6tr6N3w0tq2jJ/+a/vEDJv+5ozKJx8N5gbJNdrtI4k7I\nyaQNWJ7cngtAHmUREeoBggV5uJayDceu83PPQR6N9/WVyNyZjw1Q8/Q6e/NyiXT2\no8mGv5tHl3DBOVuv8v7gBQgDh6ppp12M81aiCZymn2XIgjw50VQ+K15KHnLHuFFw\nwuHZVcoQ7b6oR4K4TURSfPFUeNgGS4R9v6gjg1RUcSm1Pnryc6pYnh10AUY8dk6q\n1CZ6Upt6SScP2ZEGWsFwVjjQhY/ZJmNfnhaGoFOZ5L9CnzyNCkGXFg0rL36i6djb\naqFy/z+Brnklng5ct6XWoP7uDt5BaHznQj1NHSfHn0GUQ0N968zWm9vQvy+dyXyC\nxR7vKeu2ppZ2ydoeQ9CVwfhOEsGs5OvrpapQdh9KbUHcX7b7ql01J7/P6dFuNuHe\n+7/y4ex3sEVg5YBmDtF8iZ6d7zsHd6peL1s1EsLnenQ=","translations":{}}],"screenshots":[{"url":"https://bitgrid.net/~jus/apporder-nc.gif"}],"translations":{"en":{"name":"AppOrder","summary":"Sort apps in the menu with drag and drop","description":"\nEnable sorting for icons inside the app menu. The order will be saved for each\nuser individually. Administrators can define a custom default order.\nAppOrder works with the default owncloud menu as well as with the direct_menu\napp.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order.\n "}},"isFeatured":false,"authors":[{"name":"Julius Härtl","mail":"jus@bitgrid.net","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEAzCCAusCAhAEMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwOTE0MTI1MjQ4WhcNMjYxMjIxMTI1MjQ4WjATMREwDwYD\r\nVQQDDAhhcHBvcmRlcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKVK\r\nKn5jivCu+eRfe5BECjDOzNaGHlpiegb49Hf4nh0W7DqcoLHip5c1O2BcEYdH6rkw\r\n20WclvjoQpgavG5aFXzXzur6eKTT5TpgY5oZTLoWjbx4e+fKdhyDPTpqNZzs1pxz\r\nsZLDL/ElpbSErE0s+QK/pzP11WNPylAkI9AKSyDMO3Mbllg8I8Bt+bT7LJKYOO/T\r\nLhv9m0anLZ4HrdfimhVIoMiu3RpyRigk8titXZA94+F8Fbf7ZQ9f14Y/v3+rfJFQ\r\nii9cDoox5uUrjplH2LrMr5BodfCfydLu4uVpPWYkdccgvcZ1sugjvNXyCQgdzQDK\r\npOpiwVkkiQFaQJYbGSDblFWPl/cLtA/P/qS7s8tWyTQuc1rYlEpCHG/fG8ZFkSVK\r\n9eCMGxK908VB4IU2DHZHOHi7JvtOz8X/Ak6pIIFdARoW3rfKlrz6DD4T9jEgYq0n\r\nRe7YwCKEIU3liZJ+qG6LCa+rMlp/7sCzAmqBhaaaJyX4nnZCa2Q2cNZpItEAdwVc\r\nqxLYL1FiNFMSeeYhzJJoq5iMC3vp2LScUJJNoXZj9zv+uqTNGHr+bimchR2rHUBo\r\nPzDLFJmat03KdWcMYxcK5mxJNGHpgyqM7gySlbppY/cgAospE8/ygU2FlFWIC9N0\r\neDaY+T8QA1msnzsfMhYuOI8CRYigan1agGOMDgGxAgMBAAEwDQYJKoZIhvcNAQEL\r\nBQADggEBAGsECd+meXHg1rr8Wb6qrkDz/uxkY1J+pa5WxnkVcB6QrF3+HDtLMvYm\r\nTTS02ffLLyATNTOALZFSy4fh4At4SrNzl8dUaapgqk1T8f+y1FhfpZrEBsarrq+2\r\nCSKtBro2jcnxzI3BvHdQcx4RAGo8sUzaqKBmsy+JmAqpCSk8f1zHR94x4Akp7n44\r\n8Ha7u1GcHMPzSeScRMGJX/x06B45cLVGHH5GF2Bu/8JaCSEAsgETCMkc/XFMYrRd\r\nTu+WGOL2Ee5U4k4XFdzeSLODWby08iU+Gx3bXTR6WIvXCYeIVsCPKK/luvfGkiSR\r\nCpW1GUIA1cyulT4uyHf9g6BMdYVOsFQ=\r\n-----END CERTIFICATE-----"},{"id":"twofactor_totp","categories":["tools"],"userDocs":"","adminDocs":"","developerDocs":"","issueTracker":"","website":"","created":"2016-10-08T14:13:54.356716Z","lastModified":"2016-10-12T14:38:56.186269Z","releases":[{"version":"0.4.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0 <7.1.0","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/ChristophWurst/twofactor_totp/releases/download/0.4.1/twofactor_totp.tar.gz","created":"2016-10-12T14:38:56.174612Z","licenses":["agpl"],"lastModified":"2016-10-12T14:38:56.248223Z","isNightly":false,"rawPhpVersionSpec":">=5.4 <=7.0","rawPlatformVersionSpec":">=10 <=11","signature":"bnwWxmHEn8xkoWbtwhC1kIrJ0dQfAI3PUtU62k+Tru/BHt1G2aVxqO8bCdghojZ7\nzdFMlIJw4kekYFsVfLk8jzjUTZKVbNVKCdkHrVTQ0bUUryMAMLqGQ3PSRI5NX6D5\nFpkvwO1coYwU0XVWF8KAS0meX0ztSkT3Mv96LLrxr8F8SrB/MGmKIE4WTjt1fAIa\nZLAVEUo/3sNFTGLYBtL3wjctrkZvJltP8abeRfls9FkRHu+rN7R3uLFzk42uZn3X\nWpt5BBmlYm5ORbnJ2ApsxEkMNK+rOy8GIePaz5277ozTNrOnO04id1FXnS9mIsKD\n20nRzjekZH+nneQYoCTfnEFg2QXpW+a+zINbqCD5hivEU8utdpDAHFpNjIJdjXcS\n8MiCA/yvtwRnfqJ5Fy9BxJ6Gt05/GPUqT8DS7P1I1N+qxhsvFEdxhrm2yIOhif8o\nh7ro5ls+d3OQ8i3i4vdZm821Ytxdu/DQBHiVoOBarvFWwWAv2zd2VAvpTmk6J5yv\n3y+csRqpEJYd9fcVMPsTu7WBRRrpBsAqdAHJcZEwak2kz1kdOgSf8FIzP1z6Q71d\nMl2RKcPeutMHHSLiGIN/h7fM5aSs49wGgGZmfz28fHVd7/U0HFSMYmkT/GMq5tMP\nIyc+QZAN4qbX8G0k/QSTkK/L4lOT2hQiQqiSqmWItMk=","translations":{}}],"screenshots":[],"translations":{"en":{"name":"Two Factor TOTP Provider","summary":"A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)","description":"A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)"}},"isFeatured":true,"authors":[{"name":"Christoph Wurst","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIECTCCAvECAhASMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYxMDEyMDkzNDMxWhcNMjcwMTE4MDkzNDMxWjAZMRcwFQYD\r\nVQQDDA50d29mYWN0b3JfdG90cDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\r\nggIBALC1K94104L/nOtmTygx7QNjUcnHs3yrn71mw4pMxTlonXOnMTpwxsfL1Hhu\r\n/5GMSgupTbQPlevSl6J86UMs455/sPShd6ifmAuhb8VFaAsjpizjs0RMaUg1sjmF\r\nuV18PD9FXLourx51V/c4MG5kpavlV+bLUrVMAjbsJY2+k30tCC/XkP5u8jUWmM/T\r\n5REChn7/obPgaeddhuJoILYhKEW3VNrR8Fm9SYiviB3FLhM7URDZ97IBnXYqbvbT\r\nZnvq+E74Zc7HgYwQwrjU/AqQAInhNpAR4ZM6CkWWWWaL96O1q3lCfKJNaxqC0Kg/\r\nkGn/pxYkl9062jtMUz60s9OPDyuisfyl68UyM68Ozyz4SMRLmDVbewOqQAwmAbtz\r\n8p9AQrX3Pr9tXhARR4pDSsQz1z+8ExEd6EKbhMyiTtHtZQ1Vm9qfoR52snpznb5N\r\ne4TcT2qHAkOWV9+a9ESXmQz2bNjgThxEl5edTVY9m4t248lK5aBTGq5ZKGULNHSQ\r\nGGpr/ftMFpII45tSvadexUvzcR/BHt3QwBAlPmA4rWtjmOMuJGDGk+mKw4pUgtT8\r\nKvUMPQpnrbXSjKctxb3V5Ppg0UGntlSG71aVdxY1raLvKSmYeoMxUTnNeS6UYAF6\r\nI3FiuPnrjVFsZa2gwZfG8NmUPVPdv1O/IvLbToXvyieo8MbZAgMBAAEwDQYJKoZI\r\nhvcNAQELBQADggEBAEb6ajdng0bnNRuqL/GbmDC2hyy3exqPoZB/P5u0nZZzDZ18\r\nLFgiWr8DOYvS+9i6kdwWscMwNJsLEUQ2rdrAi+fGr6dlazn3sCCXrskLURKn5qCU\r\nfIFZbr2bGjSg93JGnvNorfsdJkwpFW2Z9gOwMwa9tAzSkR9CsSdOeYrmdtBdodAR\r\ndIu2MkhxAZk9FZfnFkjTaAXcBHafJce7H/IEjHDEoIkFp5KnAQLHsJb4n8JeXmi9\r\nVMgQ6yUWNuzOQMZpMIV7RMOUZHvxiX/ZWUFzXNYX0GYub6p4O2uh3LJE+xXyDf77\r\nRBO7PLY3m4TXCeKesxZlkoGke+lnq7B8tkADdPI=\r\n-----END CERTIFICATE-----"},{"id":"contacts","categories":["office","organization","social"],"userDocs":"https://docs.nextcloud.com/server/11/user_manual/pim/contacts.html","adminDocs":"https://docs.nextcloud.com/server/11/admin_manual/configuration_server/occ_command.html?highlight=occ%20commands#dav-label","developerDocs":"https://github.com/nextcloud/contacts#building-the-app","issueTracker":"https://github.com/nextcloud/contacts/issues","website":"https://github.com/nextcloud/contacts#readme","created":"2016-10-30T14:00:58.922766Z","lastModified":"2016-11-22T22:08:01.904319Z","releases":[{"version":"1.5.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/contacts/releases/download/v1.5.0/contacts.tar.gz","created":"2016-11-22T22:08:01.861942Z","licenses":["agpl"],"lastModified":"2016-11-22T22:08:02.306939Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"ZqqhqtbHcNB+rzGCQ7FDIjjvHjit+dhAE1UhFgiXApkx3tmPP4nJOBAGNjHe+2Ao\nVcTIX2SrWEfieRrA4Gp+0k7pUPWag1Z0T1OVOwO4cmS1AVFyGIOE1bRvDhMfsWTU\n4CI4oXaKBFAY6mtnf7VJ7EeIdNqhImkohyWDQ88NiPRLM1XNkJJk6AvZBcT0fvCv\no145X4dLpbixSXsN99QFNJ/oXvK+9tBGwTd5i/WnNFY90vcNRLia8aRo7SA0YJRx\nLnxnj2HMqwTTDQEKE+1elYKWsqQ2DeqwScP97UIKe5bZXnrwOi9kH9PDmR4abtzd\nlHL8E1Wgw25ePDeHG7APrx0tVOJy1bP+g8vcarpGynWZoizDkBvYZD+xtxizpBXC\nJsDOSzczApptY6dnOtv0Vat8oh/Z/F99gBUahEu4WZ16ZgR1nj40PDK1Snl18Cgk\nMe1EZcde8SLEpTbCWYIfIw/O9Fkp5cWD/dAqoiO6g+gNxSZ/gGp57qoGfFxn7d/x\nH3aH8GljatAFjrwItw1JzR0THt0ukkOK+bw/pfCslk10sjHMitmz/GXa4qMS91DZ\nBKLUd0dSfQUQzkfwcojImbzJRvca4/DYe3mfG7+RCH0tDL6t72dKL9joB++u5R1u\nVZPgkToexlXcKWpiDB8H2/SEShKr4udAOjR5de9CYWM=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png"}],"translations":{"en":{"name":"Contacts","summary":"The new and improved app for your Contacts.","description":"The new and improved app for your Contacts."}},"isFeatured":true,"authors":[{"name":"Alexander Weidinger","mail":"","homepage":""},{"name":"Jan-Christoph Borchardt","mail":"","homepage":""},{"name":"Hendrik Leppelsack","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEAzCCAusCAhATMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYxMDEyMjAzNzIyWhcNMjcwMTE4MjAzNzIyWjATMREwDwYD\r\nVQQDDAhjb250YWN0czCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANzx\r\n/zJF+5/s4lOJLWIlfKQgTy+UpvIpiUXCgrsHsDZTx+hjQAhIWukH88a+7NVAL7Ys\r\nkQNC0Tlm755FJi/T6EdR7edOwIRdo2ZwakOWLZXd209+6cCd2UloHL0bgnbWepTl\r\nR/4YgbLg/G+FVKCfkEiYc3PuDZ3EVrcwQFcg7h74X9ne6CHH0Z1WQLydxJuVEb2n\r\nX9I+nIRpPHcVostkSiUmzHR7C5TjTIo2PzzgnCU6GC0iBa6z6dDYfz24QEp/b8UA\r\nZaLhjkyKghVGMnoF/s9KPgH4NM8pvvtadQN8pxlOPju4wbmKPUrsXo4ujurDXbbc\r\nYkzNt8ojobGwdTXoyDogAsGZLQd2FQksWpRvY+I3zVPokBfPMdUPLllG5VcV0VA5\r\nDRK+h2ms+XmspdBvGonjF+XdbFm9hEmDoFmoi9aU6C6AdofjmG/e9+pw/20dXUWk\r\nmMorWwXQ5yLmIn5LnpRXrOuK7CS28VRhBYuVNMlsyKhzU0rophbsD9OFXxYLjr6s\r\n7UPNwZ5h+kjXZDBKD89QctBSViT8RhLe8nulRIm0iJn1sb9hca/CF63KmsFzENfK\r\nQeM6MO0H34PB84iNyz5AX1OIy+1wHD4Wrzt9O/i2LkWK6tBhL69aZiBqdLXWKffj\r\nARDCxxIfews51EZFyHzwsw65I97y46aBKxY382q7AgMBAAEwDQYJKoZIhvcNAQEL\r\nBQADggEBACLypX0spxAVAwQIS9dlC9bh1X/XdW2nAvSju2taUTBzbp074SnW6niI\r\nbnY4ihYs4yOuGvzXxnp/OlvWH7qhOIchJUq/XPcEFMa7P03XjVpcNnD3k0zQWlZb\r\ntGonX9EUOeLZKdqI4fkrCkMLScfjgJzoHGYQrm8vlIg0IVuRLCKd5+x4bS7KagbG\r\niuPit2pjkw3nWz0JRHneRXz/BNoAWBnJiV7JMF2xwBAHN4ghTM8NSJzrGTurmpMI\r\nGld7yCP47xNPaAZEC66odcClvNtJ2Clgp8739jD6uJJCqcKDejeef0VU1PG7AXId\r\n52bVrGMxJwOuL1393vKxGH0PHDzcB1M=\r\n-----END CERTIFICATE-----"},{"id":"mail","categories":["tools"],"userDocs":"","adminDocs":"https://github.com/nextcloud/mail#readme","developerDocs":"","issueTracker":"","website":"","created":"2016-10-19T19:41:41.710285Z","lastModified":"2016-10-19T19:57:33.689238Z","releases":[{"version":"0.6.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0 <7.1.0","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/mail/releases/download/v0.6.0/mail.tar.gz","created":"2016-10-19T19:57:33.676730Z","licenses":["agpl"],"lastModified":"2016-10-19T19:57:33.834580Z","isNightly":false,"rawPhpVersionSpec":">=5.4 <=7.0","rawPlatformVersionSpec":">=10 <=11","signature":"VbMsvDpt+gSPeFM8LrZXEK10rk8kkLlgCcblgqNdCSeGZeVpwDAYv3CccVSLa0+l\nlTSqQ0VIoH+OIU6vIQNBKHmSCzTplk7OrY0+L5FajXx8LnBaOh892GfGSlEt1neN\nKyM0i0uOjO/xpCP/NoUlgkz6hnmYY5XEdN6DTsJtJ/XZhDQ45IYuIkMkHE/eFehS\n0JnOagIz+PSipeBY2Ry+tV8YbRa7bC1JAvZzlod0dyI015AHZESeitRUY+MwMWkt\nN/me7g7/Kev0wggIQQZm9aYcw63GMk/1VHUPB7Y0ESW9tx2nR5+KwTDn/Jy4DGf1\nrg8h0t5I+aPhHOBLrpczH0qaZWY2lsVZWq8KWjJI9aR9P0v2f2aXixXzD/Cuz1cK\nhvhKWkOSla4D+/FxeyHGjQvdXMG8gXm0ZmTimKChCoVuCbncDd8pzkdyNoGXcvuk\nsP8OrkQFooL4E7S4BWfdSiN/a8jUITJQkuXp/OVrVGeCupLWJh7qegUw6DvoqyGy\nD4c6b+qYn68kx3CLaPPiz+tFAZQZQdj7+Kx/lohso8yTnVSiGYrMj4IvvCbpsQjg\nWF3WSqF/K/tTnPYTWb9NUPSihTbVNv6AXOfTsPEp/ba2YSS5DjvjVjkr5vhR9eg1\nikQ3Cw6lW3vaA4LVCC+hFkMRnI4N0bo5qQavP3PnZPc=","translations":{"en":{"changelog":"### Added\n- Alias support\n [#1523](https://github.com/owncloud/mail/pull/1523) @tahaalibra\n- New incoming messages are prefetched\n [#1631](https://github.com/owncloud/mail/pull/1631) @ChristophWurst\n- Custom app folder support\n [#1627](https://github.com/owncloud/mail/pull/1627) @juliushaertl\n- Improved search\n [#1609](https://github.com/owncloud/mail/pull/1609) @ChristophWurst\n- Scroll to refresh\n [#1595](https://github.com/owncloud/mail/pull/1593) @ChristophWurst\n- Shortcuts to star and mark messages as unread\n [#1590](https://github.com/owncloud/mail/pull/1590) @ChristophWurst\n- Shortcuts to select previous/next messsage\n [#1557](https://github.com/owncloud/mail/pull/1557) @ChristophWurst\n\n## Changed\n- Minimum server is Nextcloud 10/ownCloud 9.1\n [#84](https://github.com/nextcloud/mail/pull/84) @ChristophWurst\n- Use session storage instead of local storage for client-side cache\n [#1612](https://github.com/owncloud/mail/pull/1612) @ChristophWurst\n- When deleting the current message, the next one is selected immediatelly\n [#1585](https://github.com/owncloud/mail/pull/1585) @ChristophWurst\n\n## Fixed\n- Client error while composing a new message\n [#1609](https://github.com/owncloud/mail/pull/1609) @ChristophWurst\n- Delay app start until page has finished loading\n [#1634](https://github.com/owncloud/mail/pull/1634) @ChristophWurst\n- Auto-redirection of HTML mail links\n [#1603](https://github.com/owncloud/mail/pull/1603) @ChristophWurst\n- Update folder counters when reading/deleting messages\n [#1585](https://github.com/owncloud/mail/pull/1585)"}}}],"screenshots":[],"translations":{"en":{"name":"Mail","summary":"Easy to use email client which connects to your mail server via IMAP and SMTP.","description":"Easy to use email client which connects to your mail server via IMAP and SMTP."}},"isFeatured":false,"authors":[{"name":"Christoph Wurst, Thomas Müller, Jan-Christoph Borchardt, Steffen Lindner & many more …","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIID/zCCAucCAhAVMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYxMDE5MTkzMDM0WhcNMjcwMTI1MTkzMDM0WjAPMQ0wCwYD\nVQQDDARtYWlsMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp++RuliQ\nlBeeiPtP0ecBn00OaU1UCpft/NVI5pnSiT9nU4l2kc5IvKjA8UxDB3gWfYTOeBFh\ntUHQ2P6UKCmHZT9sApHhqLu2n0V+YhlFIViuaxndSID/M414cl56xOYQusV3Pcae\no2dOSeRRzLab3tEaVHlkBSFkGmAwPZItsmTklvV3h1sUysDicYgfXPCkf7K+JgWA\nBP7vsWC8B7MDRhcB3enYv5tTcpsyvtGX7bb1oTIWVypcmKsGYfTX12VNBxKzNBIG\n8pwdb8Xo0o14TytWsWN7mSHf1XbwfwYMjDWOlMqiRc+mcoKMBH41TfM/CXslSivI\nsyvxasEaFdlj8lmKPENdzw1OfYRs43usIf4szwyt4rb8ocXfDipnY3P2hccN6YcZ\nl8y8Vsr69ASluDj2A2Pl5vH6xp6tNybZRnN5G6sghhaYaLNDU/TdMyYzz4AY33Ra\nHSaMypfcXjd76Aj8jZvcwk1BH+ZsvFqNK7ZKCb7WVcMH8KRcU1sxZ4rp9vviM2fL\nL7EVtznm3bSI9jjHXbiwq7RvNRRy+F6YRpAdWGwTU8uUkDabPFi41FikYyzNWauK\nJhlDJXl514XjKyMVBjAZYVr5gZZkO1J7C4XzLFbC5UzYNSzW5Iwx/1j5OeYJRxh6\n5rhiUwR+COT1wdVsl6khMC8MfBR4unSd338CAwEAATANBgkqhkiG9w0BAQsFAAOC\nAQEATBvpqz75PUOFPy7Tsj9bJPaKOlvBSklHH7s43fDDmQbJwswXarZi3gNdKf8D\nyO/ACZvO8ANWAWL/WahkOyQtKOYzffaABGcEIP7636jzBdKtgwSGzW3fMwDghG10\nqBr2dE6ruOEdSpuZxgMgh2EulgknZUXaHAMI2HjjtAMOBScLQVjOgUqiOHmICrXy\nZETmzhx0BXDt5enJYs8R2KMYJNIme1easQRYmWKliXogNY09W7ifT9FHtVW1HX+K\nxRS4JXbapjolkxyGSpP+iYSgItVnYzl6o9KZResR4yDsBv7G/8fpV4GQU9IS3zLD\nPiZOosVHWJdpUKCw9V4P1prGTQ==\n-----END CERTIFICATE-----"},{"id":"audioplayer","categories":["multimedia"],"userDocs":"https://github.com/rello/audioplayer/wiki#user-documentation","adminDocs":"https://github.com/rello/audioplayer/wiki#admin-documentation","developerDocs":"","issueTracker":"https://github.com/rello/audioplayer/issues","website":"https://github.com/rello/audioplayer","created":"2016-09-16T05:44:24.857567Z","lastModified":"2016-11-17T22:34:34.637028Z","releases":[{"version":"1.3.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/Rello/audioplayer/releases/download/1.3.1/audioplayer-1.3.1.tar.gz","created":"2016-11-17T22:34:34.215350Z","licenses":["agpl"],"lastModified":"2016-11-17T22:34:34.867778Z","isNightly":false,"rawPhpVersionSpec":">=5.4","rawPlatformVersionSpec":">=9 <=11","signature":"p6Zz0IEFrxvw6y/3jHgGWWCxR6qpMzvU2HKfxcIVsK6sJnoRUhWLeAXwZ432fH2a S2llj+IGS9OvW+5VQElrXgPtEjDK1BT00DRJnp5RFCRlUv0LNoedJMzx6B6AHqPP JBufk3cG1O/CO0M0L1ITGSmSOzfKvWTRo3lxVGF792NyBaP/SyZCkH1N1TzBQzUi Ywl3+HiglPcXbHjtJm/arnKorbJWVKoaN93xFuaBapd2ozQSpi0fE0uGRsici+U7 HNa1M5WFE1rzUJoufE0E9246At07rFY1e+TdNEq8IlLgCXg5vGCKkEyuWpWno6aX LfRaIiT9x39UTAwNvuDKS0c+n4uWDYPsGfKhDx9N7CXpUrthfXVEWRzZEXG7as10 6ANvrRPJemSZH8FUSrdJhD7k12qa9R825y7mIG68Li8P71V92EOxFfo9tNXqXwBt VuDGxBqByFVPqSCj5I8hrzJzQl2Xt40g8+8ZcSF96RMg/pM+bwRMTv+mz0V+vQQ4 DWjqnWVPalaJ1PPD5/QFFErtXuNRbyxKZ6BMWxfJlLM9Kz66P75K+8fYaSwz+2KG NxY7I3svzS2K9LGH3fBLUy1t3Hl+c3zGFq/ll1MJrf9NswV4yxt2WmISfM/KDww8 yELkGs2cRzbw2tCvnmYlJJhIqRLkyFAbDzWRH/XdVx4=","translations":{"en":{"changelog":"2016-11-17\n- fix: one-click-play for wav not working\n- fix: wrong sql statement for PostgreSQL [#90](https://github.com/rello/audioplayer/issues/90)"}}},{"version":"1.3.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/Rello/audioplayer/releases/download/1.3.0/audioplayer-1.3.0.tar.gz","created":"2016-11-15T18:11:19.539636Z","licenses":["agpl"],"lastModified":"2016-11-15T18:11:19.592881Z","isNightly":false,"rawPhpVersionSpec":">=5.4","rawPlatformVersionSpec":">=9 <=11","signature":"lbp7wd3JhMHW5mC8kVnQFvcwzf3aTIhYhq3ak/C/vfDXJDIPFuQ1odVRWtaHXEKQ XmKYIoTobV1TAU5q9G0O0Kds73T/XtHG4ATLxMZE8RsUWNSj5v3H4YDub6A0uoX6 rzyLEYV6SGEtdPFMwLcUjDExKpzAzKpgxcd9uyz2NhcHJEO8FJmirn34bm69//TO vjjiMW4zpL+dho+7LQbOX+L1SmwmdBqwypE9zzeuIuhUWDEQtImHAvjIO6Temajm lX0H5JaowJa8kvP6Jkh3KAvsHQ4sJklvWTPGcv0gboN+o6CmjWNOb+3LeSH0nhe6 BmiPloUDJcPQwq2gQejH2pY+qJEdRcULSKS09/dRbE3gOSlG36FThN0INpv6uNP4 qVIiYs3/SEHMmlS5CHvJDt2S2XN9LT9IX7QPeuS/0CMcuopaG/+cdC4KscVCq4D4 bllgew9asiBqix8iV8C4oerYOiC5vWcgBrZhGShoJT1Qq+NKz+H10dFgjFCAZuPj nVagJkbXmf2NdcvpSC7qsufhyEZyCSp+I7QEYsbo1PW3aUU35Syt47lgeVFX0hVQ jC1wMIhEW5Rm2nCkRSZkRupKDQ+N6uWuB0lykeMV2ShcDvvUZrhN3c49sooWgigB yIqKryzM4fLErjjNHdYgwCq6bbgPDLK3ic9b3B4rF3E=","translations":{"en":{"changelog":"2016-11-15\n- fix: handling of temporary scanner files [#68](https://github.com/rello/audioplayer/issues/68)\n- fix: simpler analysis of incorrect files in scanner [#57](https://github.com/rello/audioplayer/issues/57)\n- fix: album sorted correctly by artist and album [#80](https://github.com/rello/audioplayer/issues/80)\n- fix: neutral cover for unknown album [#16](https://github.com/rello/audioplayer/issues/16)\n- fix: error message from ID3 editor shown in front-end [#77](https://github.com/rello/audioplayer/issues/77)\n- enhancement: occ support for library scan and reset [#72](https://github.com/rello/audioplayer/issues/72)\n- enhancement: select a dedicated folder for scanning in personal settings [#79](https://github.com/rello/audioplayer/issues/79)\n- enhancement: exclude folders from scanning via .noaudio file [#79](https://github.com/rello/audioplayer/issues/79)\n- enhancement: significantly reduce database reads during scanning [#79](https://github.com/rello/audioplayer/issues/79)\n- enhancement: cleanup of classes; move from \\OC\\Files\\View to \\OCP\\Files\\IRootFolder [#72](https://github.com/rello/audioplayer/issues/72)"}}},{"version":"1.2.2","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/Rello/audioplayer/releases/download/1.2.2/audioplayer-1.2.2.tar.gz","created":"2016-10-06T21:21:05.414691Z","licenses":["agpl"],"lastModified":"2016-10-06T21:21:05.483224Z","isNightly":false,"rawPhpVersionSpec":">=5.4","rawPlatformVersionSpec":">=9 <=11","signature":"toeS45z50Lm0djgrQokOTN7gA8a113IZtiKKiLsGUKWrCV/6AKJBmEFcSun6rhLH\nbz/RtIdFKwQql6O3E0m1Zch2y1A8aLWHzFTO+5orLCVi7y15SshrJYbb9aI5Pj3i\nSR7+kMHGS8uNx2uIn3B4mO6UYF8AzCfp+ule18DOjnpu86KWvEOGtFXsQkLtgepp\nbJhOGWW/uOVIos/T1xPP4GCmtVmgn7U3b9q0pMYRH7ONXEiNsfQxDrR66EZH3Jfo\nlVyM9UvQmMKoDSdBUlvLlhCEGJGqFOD7hFntLYloI4oXv9uGqcagaJVh3TkEysY2\nMbBZpVhch5zRJ/HGlZOvmEzZ8Inxkk3iap+JmJ5/gZTefwfKUyYHALsILlh820U2\nNA/1B5A015XH5a5uflGE/tnlPtrOeecIN4mg+1njo2RG89HJWJNHM2ZDO4SkXjSR\njgygmAS5aR5+KKifiA/pwjhLozDWPU4lNzsj3Foz3bx3Okopy7eq83LORqieT4Jp\nFvP64q/45LOSRBWIWLitYzRzZp7HYywMsnz12WpxtqxIjO7+7y/ByeWWOBNU1IJC\nK2D+035ZGWZr0CxDJte33WOISwjVoSwrcov++O3BQW8lM5IkcDNcJFyzNPKAXcQU\nPUXmQpYurHoIw6odAYcbrG6iOiSesuNOf2kQWbjV3/c=","translations":{"en":{"changelog":"2016-09-18\n- fix: icon issues with alternative apps folder [#65](https://github.com/rello/audioplayer/issues/65)"}}}],"screenshots":[{"url":"https://github.com/rello/screenshots/raw/master/audioplayer_main.png"},{"url":"https://github.com/rello/screenshots/raw/master/audioplayer_lists.png"},{"url":"https://github.com/rello/screenshots/raw/master/audioplayer_share.png"}],"translations":{"en":{"name":"Audio Player","summary":"Audio Player for ownCloud and Nextcloud","description":"Audio Player for MP3, MP4, Ogg, and Wave with a lot of flexibility for all your needs."}},"isFeatured":false,"authors":[{"name":"Marcel Scherello","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEBjCCAu4CAhAIMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwOTE1MjExMjA4WhcNMjYxMjIyMjExMjA4WjAWMRQwEgYD\r\nVQQDDAthdWRpb3BsYXllcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB\r\nALyC+iLscLs62NeNmUXEBmg+xMuUtDmZKr+xzJWtl6SSNRz+8K1JygvUIXFJ3RIL\r\nCYA3xyq8/wyZH1gNrLKyz5eTeYawG+eT3ges/FT6MWGUbZoRrBrikVcLC94QzxTH\r\nxOl8Dn+SCV/2bhcvPTQdhK+dqtvGilOtjHa40iMrk9gSdlKVys5CK/xdlEp8uiMa\r\nkz1WENn8MVCCJV58bAUbaCupDWXR9CCoSsw8XinNsCenZ2B2XlnmbM44280w0ojs\r\n72rfQRgj3yDG+ZUUyUOuxIuodu8liXYciLf0ph6t/f/qoSmctbBdsR5Fl1Upj1Ac\r\nqeHb5Yf/B3Vi6Mn3XfDx0H2EHk1v9Dhzxay+v9BHUzyIX2iH/q+7TE0/Jzo5AwBW\r\nvFKWXvG7wXaALcHYZf5v/M93IE0iCHsv2EsZKQPBnzXVGmp4DwFSP4po1B7hcog1\r\ngAMaellAzzvUAizgCovN6Qct3qDEANYniPlvtnlcaQGonajW4N019kFQRHLIzPFR\r\njab5iUMMwSnT8FhZO2ZOWuWhJven+gXjxC8mfMVgBfZnAVgydNfx9rN+KzTc88ke\r\nobUdZ0OOeBzA7pIxGEFg9V6KTEEWZ+qH048vxXz4HI9B1I+2wQLBrZl8CvweEZ5U\r\n5ID8XrrE/UaNZ1CvLKtCgB24gj/m1Elkh7wA3gEcEo2JAgMBAAEwDQYJKoZIhvcN\r\nAQELBQADggEBACtgUp+FCmjWIkQUuWSdzKWdO+IH4v9wBIrF9mo0OLIakFyDYyM5\r\nLlkYZXbplGXd4cfn3ruIqJNzlIb4xa5CU0bM4TMbD4oOSlLMKM/EamKPHI3bzr++\r\nzi7mQDFxmAE6FWSMBgKKUb4tqLc5oBap8e12tPEZl/UR6d9iUB2ltvrm3T3vrjjl\r\n2Worm0eYBNqnagXmX5+wS11AQqeJemGqRy5e1yXRlTgB0IJhH0dCsFNwifEigutp\r\nFNvGFVBn4r5qCiChEoq+rCXHRjPi/eCfbW21XeLFDiLxapcZyc85JIcA7znUYoFe\r\nP7Y/ekMscwWhLbF91OaQlcWpRtEMyde/DaI=\r\n-----END CERTIFICATE-----"},{"id":"calendar","categories":["organization"],"userDocs":"https://docs.nextcloud.com/server/10/user_manual/pim/calendar.html","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/nextcloud/calendar/issues","website":"https://github.com/nextcloud/calendar/","created":"2016-10-01T12:40:39.060903Z","lastModified":"2016-11-22T20:31:13.029921Z","releases":[{"version":"1.4.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/calendar/releases/download/v1.4.1/calendar.tar.gz","created":"2016-11-22T20:31:13.020268Z","licenses":["agpl"],"lastModified":"2016-11-22T20:31:13.087340Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"nThwe9CJBCan9nuDLdhfBiQyPhmum6Aa0UcYsIDdhGMw+C2acf81KhEmBJuTTWxo\nWGby6WcrcJJmeuCW+ePU91ju7Pd76RirprhVXIEceIDzSCxin+K0oZCZ1IGVIJjP\nIkVehTsLuCeTBbjvz1b3k5QFyhUhvd32Xt7k5d7VARyI4OqnqYYNBtH9vvgeRrFw\nAxsQr4o4axof6i3iykLg6WfWarYArY4dIuu5DkPuGPWf2bbgjwWEra4sQejhOs7G\nsk1xcsfYv2NpArIbpw/wnATdjiax+Gjz1URMD3NgL5ky0ecuZmNvN25QErg3nlVr\nhh1FBfA5pvCJbkJ6nr5bU4bKaffwDX1nr5h77FS5zzn0Pyd7ZIExmVmNtaeJfnfV\n5vnclapzXMNU+R6t/ATJQd1srvSJhyljQapzsqnrjNMEUojOEvqqygJp0KwNVPqs\n3g9XGSoOnO+WULWBeISW7UVOg8BOF8pwvHIU2++bSzOdpypW0Eq6p2DPWO6qL/H1\neFLKrUg3EvnTjvknbBxMB55h9jNJr0SAlkrmyEVm6+CE3BwRWpKB+cJMBuGiwPwv\nr/ASRiJrkDThbNWAUtX70rUmCqDV6/MujLXViqOc/Q2OHvcXd1oGDccJSQT92/1z\n7nonnedyYQIDqUt7u68WL8JRxp7pFsEqKLVuWSgxW3c=","translations":{}},{"version":"1.4.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/calendar/releases/download/v1.4.0/calendar.tar.gz","created":"2016-10-06T19:58:12.724588Z","licenses":["agpl"],"lastModified":"2016-10-06T19:58:12.790604Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"b//hJbICFMLR0Va1BGMzpLpaPREOo9QhjgfrHvDOfXVpddhvCM8ocz74X1s5hKyy\nGg67EE0pOp0dBf6RyJjduI+Dz1wQX55My7J9G1vXGCN30C/8zAcKSJoA218IWcub\nICavLkz2PkiitIOSZyBCAfEiSAeHPop/JGkq3KxQDC7QwFC78BnE9/adD9tO55c/\nDGLhvP/uTJIeH8RUifikTqVMmPH+aP3uPbZzl+AxhUezRiNCpEtZPA5QGqtQdJU4\nFc6x3d9y4IWbJV4TEIAP8jdfqtLVUQ6szFVnN8Oi1wtN9e8LIylBSYbmIZRj0+qh\nZcgntzEq6U843ZwXcAnL5jNYV0m+KNI+EkXFeWHkjvbwfCdvGPBvgFVbhc0YPzXU\nqHOe4Lvcx9X20ALG/MacV9zX69GzNnWgbBp9RnIHuaSRPFEKrNXUeXl2THuKsTyQ\nF9QtTwS5U5DcMyTO2RAN45NrRxIh8IL4stoIg5rmF7/ZaOm/Jza2gnUquOTarDE/\ntiWnNW5kWUAWyYYHvQgQix/of9qXvc2hhZaw0y623WDNrEwA+rngnjDMLA/vNv3B\nhgwQ6NbCOuHWsRK3S8DcJFpB9Kj/i7CDvDLEuJYnjSTvQ/q1XqawbJPDoRlydX43\n3/L0LvHvKVakYybv2OE5gy6bQ2Dw8e7D27DtZ6XTaBY=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/1.png"},{"url":"https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/2.png"},{"url":"https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/3.png"},{"url":"https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/4.png"}],"translations":{"en":{"name":"Calendar","summary":"Calendar GUI for Nextcloud's CalDAV server","description":"The Nextcloud calendar app is a user interface for Nextcloud's CalDAV server.\n\nIt integrates with other apps, allows you to manage calendars and events, display external calendars and invite attendees to your events"}},"isFeatured":true,"authors":[{"name":"Georg Ehrke","mail":"","homepage":"https://georg.coffee"},{"name":"Raghu Nayyar","mail":"","homepage":"http://raghunayyar.com"},{"name":"Thomas Citharel","mail":"","homepage":"https://tcit.fr"}],"ratingRecent":0.944444444444444,"ratingOverall":0.944444444444444,"ratingNumRecent":9,"ratingNumOverall":9,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEAzCCAusCAhARMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYxMDAzMTMyNjQwWhcNMjcwMTA5MTMyNjQwWjATMREwDwYD\r\nVQQDEwhjYWxlbmRhcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMm6\r\nFTeqgzCXprkU83VM4/DrZWn3kqtfaR/edkC4gYT3ug7RHa/Uv1C/S++vr7pvgpnk\r\nYzQoavl/0Qlh5sKEYX+0ud/LQDoiidwBRDckFUQ1bRfVLxAD9UAVvDRHxDqJMOx2\r\ngZArbeQ3ztdSHZp4ThzBFWq2FILsJD86weG7LwHjzhW6SWgLb/YTLbuuW6tRCDVV\r\nbtB0I/a0vCwj2u91Chw3u6pWWjPakc9DQrIDH4HCIBKQ4zVrYDxAmJDRFGDvVVWx\r\nuIAeux8sd8drqSMqAhX+XMcZPRD71NQTWbCupSwWO8kgjmZnBpIiBNpzvMQzJf3A\r\nQloZtjZ2RDXAQG88eTeT8pp8yEOCEoDLpGdraKxJrh/z2Dsk30JP3lOiNYJ9vBaB\r\nC8NJbJ3oAlG7THwUaFF9fsdAKoTwzs5Xms04TI7W/v4Z/GClOzMymnR1T4sR72Oy\r\n3WaMNHv/1QGffvQn2/TtZt23Ou3P083xWx2vn5FgTcac8+x85vRgWsVCA4hq9v6m\r\nAlktB0+UWDEXpDTKD9BdFNWM8Ig9jQf7EJrvTLNnS7FIJZMB4GK8lpvPxyvACWnh\r\nR2hQOe987Zvl3B1JZNO5RvtSeYld9Y9UfMgW1aPRweDNjSuZYAKlugx1ZoyI5HyA\r\nQjfzAwicIMwZsCJDV/P5ZO8FE+23rdWaoJczpBqDAgMBAAEwDQYJKoZIhvcNAQEL\r\nBQADggEBAHQXwvj8q5khWR/ilg3JGYpmMNBYHE9OeDaOcNArkKaGMd478SDPOXeu\r\nyW7hCvNEpiTk5g0h3g3yleZFws0xH8fPsQgZANgvQXb3RCcD61NL77d0cMTr7Xzr\r\nN3Lq/ML1YLc/WwL4uV1XvpMQMwALFL1p63BU2c0ysO31zbLOjMKAJi0hHFDYz5ZQ\r\nD3xxtc17ll3B5IqrMnMHRqmOQ39Sbe56Y7T4agaIz/sUWpseo85D5kt7UAIOR+Mr\r\nQ0Bl/QinETk72afGR46Qvc7tC1t9JjQQD3AUbEGuJdGvXjJJ9GREYu01XoODmPdT\r\njXXOI8XIOK6kxXhPHUc3iWu9b4KqGm0=\r\n-----END CERTIFICATE-----"},{"id":"gpxpod","categories":["multimedia","tools"],"userDocs":"https://gitlab.com/eneiluj/gpxpod-oc/wikis/userdoc","adminDocs":"https://gitlab.com/eneiluj/gpxpod-oc/wikis/admindoc","developerDocs":"https://gitlab.com/eneiluj/gpxpod-oc/wikis/devdoc","issueTracker":"https://gitlab.com/eneiluj/gpxpod-oc/issues","website":"https://gitlab.com/eneiluj/gpxpod-oc","created":"2016-10-31T10:57:44.387319Z","lastModified":"2016-11-23T17:27:37.793159Z","releases":[{"version":"1.0.8","phpExtensions":[],"databases":[{"id":"pgsql","versionSpec":">=9.4.0","rawVersionSpec":">=9.4"},{"id":"sqlite","versionSpec":"*","rawVersionSpec":"*"},{"id":"mysql","versionSpec":">=5.5.0","rawVersionSpec":">=5.5"}],"shellCommands":[],"phpVersionSpec":">=5.6.0","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://gitlab.com/eneiluj/gpxpod-oc/uploads/963bbf246412bcbe8979bccadb3b8d03/gpxpod-1.0.8.tar.gz","created":"2016-11-23T17:27:37.783365Z","licenses":["agpl"],"lastModified":"2016-11-23T17:27:37.862469Z","isNightly":false,"rawPhpVersionSpec":">=5.6","rawPlatformVersionSpec":">=9.0","signature":"hqhMh1l/mnwbYf4uPzEjjLFtZWHidzgR57X471OuXv2K/s87T5WhIkTSKk+2r8sp\nS7CtrF5+Pc5AgCCHvwzawN3e2+4eO4cK0+HD9CCzygzzHZEbSjufNHMMQucVoSD8\nPqR6MV9azzUpwHa/5d8fp3cFLVAle+aG0o4v5eHky9c7eaKxVJcgfjw3pjDE73N6\ngJVdtw1jf1kOFYk5pZQxDfBKFDrO5BRo5ZfZGuOuP2u/SmTwj42oTZiT7oTVWhqd\nLvJw+2TPv7B8s0Gin+J5e9K1Rs6CEWQ6WBxM+NhS5KgWB5Ig3pwm0QvMgza2cvoh\nlwVobOotfKLUBJzg0+wR7B2YH9Ao+m94h93vg7H0OKPReoTKhlDj2UExoTyeurV8\nhJdQv8sKVAxjC7/xrVaGSjM4YxFdBpzq8Zl8z4zq1o2voH5+u4ko3c62C1loDpsC\n8KrL1t6A7QpMk/XAMrPqwEPmFqlLEdv6FhzpOGyt4IEVnv6vdMTShcYw3tPvU/mD\njPtiVwpo8gWbGVIfpmwBg4wPaTrWK8V3+/1iTahIQHZfu4Lebb5mzht80HLQIcd8\n+oB4cGDEX4Rix1WxnCmE5ZzURY8xQXcvqYN+mTrUDh/3OtxQPSm5yC945SGoFNpr\nBYxfEyQcwulZrOMBdY0Ssj1AB5NOeC9OHwjJrnVe7dQ=","translations":{"en":{"changelog":"### Added\n- save/restore options for logged user\n- option to choose picture style (popup/small/big marker)\n [#25](https://gitlab.com/eneiluj/gpxpod-oc/issues/25) @eneiluj\n- add average speed and average moving speed in comparison table\n\n### Changed\n\n### Fixed\n- bug when python PIL is not available\n- deletion of bad parameter given to getGeoPicsFromFolder() in controller\n [#20](https://gitlab.com/eneiluj/gpxpod-oc/issues/20) @eneiluj\n- bug in file cleaning, bad use of array\\_unique\n [#22](https://gitlab.com/eneiluj/gpxpod-oc/issues/22) @eneiluj\n- python script do not need to be exectuable now\n [#23](https://gitlab.com/eneiluj/gpxpod-oc/issues/23) @eneiluj\n- jquery.colorbox was brought by \"First run wizard\" app, now included\n [#21](https://gitlab.com/eneiluj/gpxpod-oc/issues/21) @eneiluj\n- avoid JS error when failed to get options values by ajax"}}},{"version":"1.0.8","phpExtensions":[],"databases":[{"id":"pgsql","versionSpec":">=9.4.0","rawVersionSpec":">=9.4"},{"id":"sqlite","versionSpec":"*","rawVersionSpec":"*"},{"id":"mysql","versionSpec":">=5.5.0","rawVersionSpec":">=5.5"}],"shellCommands":[],"phpVersionSpec":">=5.6.0","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://pluton.cassio.pe/~julien/gpxpod-nightly.tar.gz","created":"2016-11-16T14:06:33.937534Z","licenses":["agpl"],"lastModified":"2016-11-16T14:06:33.971502Z","isNightly":true,"rawPhpVersionSpec":">=5.6","rawPlatformVersionSpec":">=9.0","signature":"JtUhKRDFGYDx9xtHjdfEUFOb0O4idexUYw6ixlBhKPP8Dn7NfyBfV6KH6MJTIVLU\nQ5Jw6tv/Nr1YDOvVikcWPG0p23mQdn1+7w8DzzIGKmknxCat9/vKr83oJZdWYxS7\nTJ4I7qTvWNlbMfK8OEdl13VJXgc6ftX+1isluLYqLjEm3aBFCS+/awYNMmXO55a1\nyG0NgJRu3pw1CBCMhDaRLsunhpRNDVLsamZj1SPmeT8qy0I/arFaG6hQnAo6JosE\ndi1XkvK6TEt9g16L6eizd+JpGE7xiWFP9ZEmMmmQSOLQYwU5Sk1YWcrW3EX4vtz5\nWnEIC0SENyyAyzBO6YJfu/EP2lLnlbNJiuc4zzKLqRw/zyz3j+imJLcXHIA78ZkQ\nuyUOBkkk3xeyBGeUcYfDuBqYQOQs+F/7+cNMsIBKJhx9ef3OPURBc7X16upk3mxV\n6GsOktbHkgUwWk3WiXRriBIqbAZocvDp0+PN++PAEZVWFEZEJzztd4Fxaeo+QSN5\n5Pz/9yXYRsoSPZv82Tlh7dx5tIPUvYb+UsANh5eGWUGufTSwgYBN0H2KT/iO35D7\nkDzNyh1qNakfBhAgPjrC2p4mBKBJJjlM0D9erDwr5D4GSTW2fp92vlRHeD0X8sqo\n3kBbwGuWnmhdJhbd7zYy0jVM6tVX/zgbhycimNALG0I=","translations":{"en":{"changelog":"### Added\n- save/restore options for logged user\n- option to choose picture style (popup/small/big marker)\n [#25](https://gitlab.com/eneiluj/gpxpod-oc/issues/25) @eneiluj\n\n### Changed\n\n### Fixed\n- bug when python PIL is not available\n- deletion of bad parameter given to getGeoPicsFromFolder() in controller\n [#20](https://gitlab.com/eneiluj/gpxpod-oc/issues/20) @eneiluj\n- bug in file cleaning, bad use of array\\_unique\n [#22](https://gitlab.com/eneiluj/gpxpod-oc/issues/22) @eneiluj\n- python script do not need to be exectuable now\n [#23](https://gitlab.com/eneiluj/gpxpod-oc/issues/23) @eneiluj\n- jquery.colorbox was brought by \"First run wizard\" app, now included\n [#21](https://gitlab.com/eneiluj/gpxpod-oc/issues/21) @eneiluj"}}},{"version":"1.0.7","phpExtensions":[],"databases":[{"id":"pgsql","versionSpec":">=9.4.0","rawVersionSpec":">=9.4"},{"id":"sqlite","versionSpec":"*","rawVersionSpec":"*"},{"id":"mysql","versionSpec":">=5.5.0","rawVersionSpec":">=5.5"}],"shellCommands":[],"phpVersionSpec":">=5.6.0","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://pluton.cassio.pe/~julien/gpxpod-1.0.7.tar.gz","created":"2016-11-14T00:57:37.521001Z","licenses":["agpl"],"lastModified":"2016-11-14T20:35:45.363487Z","isNightly":false,"rawPhpVersionSpec":">=5.6","rawPlatformVersionSpec":">=9.0","signature":"SigBof6QJZ9IMZyFgc+B3LO2+EXaAPvnxUHjJQjIl3jLzomocpDGR6WjO6gtvB81\nzXUHjJ8+huc+P9TvgjUGRTmn9a/29HZ4IKTXnYBKIUY7wSLcJNMbJSp2Zd3OFHAG\nJwRaEdh/cIRk2X6NE1VT6dFCxB+LhTM4BXOEwuNYQvU1lZDVQgTz/r68zFLWBt6R\nqhBCNJHrVp87ecS4+XaGq/CfT4k1ihiOv+f4eX9iaPzUhxBJ71iYKF7wHpDoVmIk\nNrzWFUJH3BLBuW9oiC0PApli6Xu5RXrWUsOV7OAmxXgylRCPuTFwe09hw16JMbiS\nii8WFiUtp4qW53+7eoS7Fllm7CRi/Dg6Jvjtp3msrf1m+OiYM7dLyoKw22/S4P/a\nBIErZpSCHaCfrZ+DBXrAYcas27GWE7HizzG3yXk3aDJMa0Otcsq56bSPo01JDfNx\nm1y9iuwmlon8zKKoxsJCwxaFDnQpqazaLcUO0ATHUk8LdomTA7MCXVvNFPaO86Ea\n16iyw7Cfs0k3GrvN71+SdpvWss359CEEwBMpDwJZqwSFbLRyHtogUgbRWLIJqR4n\n5uVvJqirxWkr/EtXw6UkDWAI3ZoMhMRtjn4H4ekANP5mC8R0yp+UuFs2RkEC5uA0\nKzzh73WmxmpeUl6jcMZ49gXn3PTCC2fJNrdmSYch5Dc=","translations":{"en":{"changelog":"### Added\n- option to choose waypoint style\n- show elevation, lat, lng in waypoint popup\n- ability to display geotagged jpg pictures on the map\n- pictures slideshow with colorbox\n- pictures work in public dir link\n- use NC/OC thumbnails to display pictures on the map\n- options block hidden by default\n\n### Fixed\n- fix bug in geojson generation for waypoint-only files"}}},{"version":"1.0.6","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.6.0","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://pluton.cassio.pe/~julien/gpxpod-1.0.6.tar.gz","created":"2016-11-07T12:11:00.619161Z","licenses":["agpl"],"lastModified":"2016-11-07T12:11:00.699921Z","isNightly":false,"rawPhpVersionSpec":">=5.6","rawPlatformVersionSpec":">=9.0","signature":"WBts2fm2rW/7LMHYjcx9a0k0WTXV6PnGRxTl+158cjfV7ruMpNvhK58iTjrox69k\nFWAoIi1wNAlLBu9Xet1j7HKi4TC9q61IEN+lPlnwBCu0uHawiqS2gqB4i8A019Ei\noLsgAPWh8ndy6+gyUtPhVLVduLH76aT6KTwAiHPknV0zPtxsUy1P6nbbNOS5A5rG\nSQBqljy0TbcjOctTudEPp1IqjJIwcd12eZ9MLG4CEIO13n53pMAsuXJf4jnKSCm0\ngimvsFOwFRjBab3ZPwtOqeVw6aIh/lYF3U3/k8YBpaDN74m30nDtkp8teXBgshSY\nVYvX3yOAYe0PIR419IX0eoHb61K0VfZYvPT4FsOqjDr0zlVB8Rjq+6SiK4vMD2+6\neGE0aHbjR9HV5jymUnFYdm/hlhcZGaKrAiQKfBY6Vh0SWKfIv7bdGfQYauePAdZt\njlsV8lIwOy7FGAeP81CcjzWWfDeBgYr+MSzfoDNoTi41MvUaT14iWPIU/s5P1/Qv\nALGxgsbmB19wEgNbdh1UtTUY3xARLpWPYdUqU7yDcsddX9vCoCG2G5wCcbYJRj8o\nC+H7wdgPJoiMY/p4Go/lyWkvmzhfXrOeXytZIFXjb3ERVd1vD9WSt1DSy/7gsFYt\nxzzOPgqMvL3BbeluNuzNv366oT872s3OuFKa1ZOYY7A=","translations":{}},{"version":"1.0.5","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.6.0","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://pluton.cassio.pe/~julien/gpxpod-1.0.5.tar.gz","created":"2016-10-31T11:08:41.017766Z","licenses":["agpl"],"lastModified":"2016-10-31T11:08:41.068782Z","isNightly":false,"rawPhpVersionSpec":">=5.6","rawPlatformVersionSpec":">=9.0","signature":"UXeZVh5f0/WZE+r/dHWc1pu9q4qr/zACX6XraMhhIuKIp7vNCwUESeqJtVc99QZw\nw9kJp0isvib6l0zbQBRS1vI7xwKKBQyeaEhIciEs1JjsaCiato1Gyi26N+fY2N0Z\nFWlTwCsF3DdlwERXTYfeCpsOWCoxLxHKhnJIjUc0PVme/Ste4zxYj+5Su1RpadSw\n4vGnkW8zy/0tzua50NQCrOg+B4jXzH9kMWAP47w3sdP5CYalHSHl8EX0D1RjgGU5\n7vZYX3wF853FvQDbL4JXXCJupj3wZe8py8McWpQIcgz1p3KmE7A7d/rdNWExT+T+\nDxtStJ56qTRMz4aFwoSFxJrrEfgHIsE9Gv+Vo7nshCUYA8gkfHeckiaUtH1EiFTh\nVNeO6mTIqGpRosFvfUrZMKcuF5j74vGQjNM1o+M5N31gtLoPSkU605f/U4v+j2oC\n3/N1rYF2SEDFO0EgAGXaXVhB0ltSDkHJw6vZJ1L8Qz6tooUMDxaMri8vycA6LHvE\nqN+z+S6TXMfLvN/6ATYPGhicrWmkMT/k7v1az/hcnfH+zRyLZyFx94s88JWF7Jf+\nI+tgDbfqTMAIcytJUC+KfdQW1ueXh5F0owrOYM6jgBRvhqj1T8s+Twgw8orGmRPe\n9h8G9Z3wZAooQvmC0KdVhLuOeIkqt/S5krELNFFBRnk=","translations":{}}],"screenshots":[{"url":"https://gitlab.com/eneiluj/gpxpod-oc/uploads/db5af6ba7ae1cd4d22ea81d418f5c762/screen1.jpg"},{"url":"https://gitlab.com/eneiluj/gpxpod-oc/uploads/123588561a8067185572a8d1887ef906/screen2.jpg"},{"url":"https://gitlab.com/eneiluj/gpxpod-oc/uploads/427688b80bf8428dd45bd15d69b19075/screen3.jpg"}],"translations":{"en":{"name":"GpxPod","summary":"Display, analyse, compare and share gpx tracks","description":"\n# GpxPod owncloud/nextcloud application\n\nIf you want to help to translate this app in your language, take the english=>french files in \"l10n\" directory as examples.\n\nThis app's purpose is to display gpx, kml and tcx files collections,\nview elevation profiles and tracks stats, filter tracks,\n color tracks by speed, slope, elevation and compare divergent parts of similar tracks.\n\nIt's compatible with SQLite, MySQL and PostgreSQL databases.\n\nIt works with gpx/kml/tcx files anywhere in your files, files shared with you, files in folders shared with you.\nkml and tcx files will be displayed only if GpsBabel is found on the server system.\nElevations can be corrected for entire folders or specific track if SRTM.py (gpxelevations) is found.\nPersonal map tile servers can be added.\nIt works with encrypted data folder (server side encryption).\nA public link pointing to a specific track/folder can be shared if the corresponding gpx file/folder is already shared by public link.\n!!! GpxPod now uses the owncloud database to store meta-information. If you want to get rid of the .geojson, .geojson.colored and .markers produced by previous gpxpod versions, there are two buttons at the bottom of the \"Settings\" tab in user interface. !!!\nGeolocated pictures can be displayed if python PIL is installed on the server.\n\nGpxPod proudly uses Leaflet with lots of plugins to display the map.\n\nThis app is tested under Owncloud/Nextcloud 9.0/10 with Firefox and Chromium.\nThis app is under development.\n\nLink to Owncloud application website : https://apps.owncloud.com/content/show.php/GpxPod?content=174248\n\n## Install\n\nNo special installation instruction except :\n!! Server needs python2.x or 3.x \"gpxpy\" and \"geojson\" module to work !!\nThey may be installed with pip.\n\nFor example, on Debian-like systems :\n\n```\nsudo apt-get install python-pip\nsudo pip install gpxpy geojson\n```\nor on Redhat-like systems :\n```\nsudo yum install python-pip\nsudo pip install gpxpy geojson\n```\n\nThen put gpxpod directory in the Owncloud/Nextcloud apps to install.\nThere are several ways to do that.\n\n### Clone the git repository\n\n```\ncd /path/to/owncloud/apps\ngit clone https://gitlab.com/eneiluj/gpxpod-oc.git gpxpod\n```\n\n### Download from apps.owncloud.org\n\nExtract gpxpod archive you just downloaded from apps.owncloud.org :\n```\ncd /path/to/owncloud/apps\ntar xvf 174733-gpxpod-1.0.0.tar.gz\n```\n\n### Post install precautions\n\nJust in case, make python scripts executables :\n```\ncd /path/to/owncloud/apps\nchmod +x gpxpod/*.py\n```\n\n## Known issues\n\n* bad management of file names including simple or double quotes\n* _WARNING_, kml conversion will NOT work with recent kml files using the proprietary \"gx:track\" extension tag.\n\nAny feedback will be appreciated.\n\n "}},"isFeatured":false,"authors":[{"name":"Julien Veyssier","mail":"","homepage":""},{"name":"Fritz Kleinschroth","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIIEATCCAukCAhAaMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYxMDMxMTA1MTI2WhcNMjcwMjA2MTA1MTI2WjARMQ8wDQYD\nVQQDDAZncHhwb2QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCq9p5l\nzNzR98l/xPgrplWrGQBhF6aQSLpnIyCdLAYKk+CmXn47W1pHh5CRYyCCyB8YPBBG\nTwbpP69pP1updfK2vUt+ShYmCXLxOLB3qEdhnwgqFfwpC48Ocev9d6XcacYp7jwu\nRNtv0ocMkm5o0TWWupcutQWkmqzCVq+OkrqM0xrf3mfPymuM6edEREshukoL86Ei\ngTuMMGT0XO99LikszvdceNQYEATix1MHzSVhkE7jHCNBXb95H6nQGr0v7R1MIbrI\nGFlgqxwwNNKwBFNfPMWZVnKwz9hoIwW6WOuu7ntwVcPqwB/gUsRZJTu7EjIW0trX\nnhA6xLlc4X66W1sdUCkJOxsV+Y21akz6wynI0SzIfjALLI2Ls4QWrPM8GOX8nPVM\nm+Y5WXzqLJScdWYoefFJKS7kxwUJRewREB9ykCG5OdDubV+Iu/6jh6HWx3h4p3ih\nqkDypPWoxpfLgA8VZkLD1RRKGkRa858QBGdF/RHbYT3JfLEp9l9gJVKZE/yw7HKk\nwsZ/T6CMpLyorpd1XWtp2wLX8lr3pp9ecVDOdAMSqD2thDMDsZA82JrJ/vITwkCF\nBlqtDZmT0UnpxYNYTfYBam5Cd00jsqCt+Hr+QkODNe8Yae9c/D0zE3h2Vt7g9H+W\n7Ei+rF5nDYTBAApoETxK7+aUZpycBf3THAJOcwIDAQABMA0GCSqGSIb3DQEBCwUA\nA4IBAQBbCGAEwg3M5QJDMnZgu0zNOH2f9bamAS9ksyCZqzLoeQic1W7GYYe9NqAi\n7lO5jXRZpTN4L133IUQPtxCxuDooD2vFmCne92tLxJbc7uqlSVfhL8uMVOlnrA99\nKTAhySTZU5so8/OibrngnBmcdWwbhaWoCQ671M8aXM1wg2FVYDqB2GP3RvbpW11L\nOc+4tfh4mO4TwXygf7KYMOJyJW8mNNY7PZ+XW2Qe3vSXR3DuN8H8fgMh5wppXPJf\nE0+yNs42hwFjSojtI8BCb0s5DTleaakpDo8HQGNzEXP8tBlUYudtjzdP0jxFXbFa\nsT9pcMdeJ0/t5HqJSx1EjUCLYS4y\n-----END CERTIFICATE-----"},{"id":"ownpad","categories":["tools"],"userDocs":"https://github.com/otetard/ownpad/blob/master/README.md#mimetype-detection","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/otetard/ownpad/issues","website":"","created":"2016-09-29T15:58:52.814912Z","lastModified":"2016-11-19T17:37:52.278497Z","releases":[{"version":"0.5.6","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/otetard/ownpad/releases/download/v0.5.6/ownpad.tar.gz","created":"2016-11-19T17:37:52.234684Z","licenses":["agpl"],"lastModified":"2016-11-19T17:37:52.423930Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"dh+Txg1iVfqXr8+cxplNQuBZGErSnXUo0ewGwnybNMJqp8/EjEo72+zPpW3dVnhY\n67YCvhrm2bo+VRdFFymEfymzSJu9nWVFkGJhEwvTxPyIdAtuD5YAVrzmnR6L+H7m\n7Q1nXE63ICPCAQpHkxIfIXLh25OhWeyofBB8AVsjDUNn58FEYJ8fFkr6dCgPriZS\nsM2J+xtZMDYufy+xFMsVf/Q3WopjFuBjMC3qOecW76ZTwtREaswOC2RtpzUku2r1\nsogrfFlFer3Ii9/CWgOktnLfjB1DzbTwdEkM2xNVBRJgdMXt2VLA9FsxFFkjmr5A\nl7x9cNLWA8RLpOIpIMBbaef75u5HgRBvSvq114UsA9GCu/EYbIgD8YxEt7xuKd4t\nenksJB5gJ2IQNdHrPbsil59AsJ/dismDN6ktYgWQEk5dINzvm9EAvucueW0Gt+Jr\nqEC5WBgJucsFxSvkHh52v43M8jgPYBfHWEL/M/+377z3+mbuIh+BcQ+vcDdiqxTF\no3n0+gw3QYIhLEe75sUhxG6ynVUdW25AKKju1kVj3KJnZTBH1R8t8/zy4DnJG8d4\nuRGqyU4BXpZjEC3nVlsC7vCncWWhxl0WZQ/MWKqsfjVAU4I88E518D6NioqMnPEJ\niCZ2x+69UCDEQyfCSKajgAYT17r3OhZei8F9KSCH8Vw=","translations":{}},{"version":"0.5.5","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <11.0.0","minIntSize":32,"download":"https://github.com/otetard/ownpad/releases/download/v0.5.5/ownpad.tar.gz","created":"2016-10-06T07:51:05.278637Z","licenses":["agpl"],"lastModified":"2016-10-06T07:51:05.348825Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=10","signature":"nYsQ9U5r7uXwtcquaWGm2XMJBNYCcA95aUx9gLZ/wEmjCHqId7+MzcCdBnom33+j\nat2XR2a4R96UAUP78bfSC4Yb7nPepFT51Y8CSpV3mDT85/+SgJdq500fXldq+qGY\nffXLneadAztyOfZO9TXljaCLdREYI0LJIGVENsxBQVKM/eyGIuZO7fF70cH5vbfS\ns37+BXB+fxcDTlP2Xuulra8HsNoS81bzjsdVMLM7B7QwwO6rZ1zd5c3UzQ1LmY5g\npQUBNd0KjfHfZ6+Fd64XZO6NGfgucGNmL3lgxdsfUqKiLtikvFxK39dYW5MckV8p\nvLoS2nZ7cgETQmAW9Ahn3ro7gXWcPxzL41oWtZOOHRRC2Yz5zlZ3Bky1o+bF9g5a\nYdDF13zV6utUkhlplZhWbjKaXa04rzOvmut8Iqhx/tmDtZRYtaQXJZWutVJYtPC3\nH86uJJnUHHNFHeoT560mp1Hq0dTeR+G+yWsPacPD1rTYgZOUVEtj3Y+YdbTODR2o\nOdGzeYFl+6CL/OcY4wPGRUCTFwvc31lIUd4DK5SPfN+IGtuuXhAqVhwy6lpkcKRs\ncj8sBoVXbMvEtMnt5uARBvA4tyVffUL4oyoIsUnvXz4u+q4WVt3T17swLm6HjGVC\nNVqU0srHN7EeBRhHlXP1CrKQWGQlS4k9j9Li4Iw+X8s=","translations":{}}],"screenshots":[],"translations":{"en":{"name":"Ownpad","summary":"\n Create and open Etherpad and Ethercalc documents.\n ","description":"\n Ownpad is an ownCloud application that allows to create and open\n Etherpad and Ethercalc documents.\n\n This application requires to have access to an instance of\n Etherpad and/or Ethercalc to work properly.\n "}},"isFeatured":false,"authors":[{"name":"Olivier Tétard","mail":"olivier.tetard@miskin.fr","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIIEATCCAukCAhAPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYwOTI5MTU1NDA3WhcNMjcwMTA1MTU1NDA3WjARMQ8wDQYD\nVQQDDAZvd25wYWQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC6CY7I\nHRJTaqDu376vt+kruX+QOL864joScxRuh3IOVcQktCvxasuA0EtrX7TCAQrV1tBK\nfkqJxU9uOV54RTgyh30yH/ZtnF2bYQwViGM06Snc0riqWydFrN5fxK52dpZWs63o\nUFCNhHxrX4aUGyfXu5nQMISLm4QHoZ3LDLofk1ZsiK62fM/Jz8N2PM8qeHzf1ATo\nSKcAOd3UeaS9C8bv2DuiZM7unkSO/tjrBzkMiq8ds9sIzBBsyk6BRh2HQjHPOtmO\ned+pS9mIZmc2xhssXoHL4IfZwTqwhktpsaTl7v0ROw2dwDATz/QoKMkUpboQ5lkz\nwgLQhoIZw6uAZ1R/Qjze59I3iU8zIo9quDarHBotZNXboYCmg9FRfE4mHtegVaa8\nv1a1JvFQ5gvsWEsKSV6Bzb65GTp4KG4q7YnUrzh6HJyDCGLvLlWm5OWsFj6sNzXX\nwLOv6JLORMbF4ZIo2iybb3x7gdfCu9JxMZ4JtOUC8KSJ6+ub15C1Aia3lN68dNts\nY6KwUF1Ted0o4OQPAulq5pUc+g6dTYmIKsavIiPKhMtl86AbUK50vRTeuGdFsT7X\nav73IanPdFI9bKth+tajgvB6dxcVnvBXbrsLUyEcsxsxtBJvQcMYS4aZ6ZJYLTep\n7AdK0Zt1iMdXB8+4PCps4rcG6bYB/uJeEAVm7QIDAQABMA0GCSqGSIb3DQEBCwUA\nA4IBAQCM10O+sCYhIExnx01vGzKlnRS7MSQNx8ZMmbR5Elfz4AVJAEJ96ytS2DXH\n2c+hcD0wAenXQEFk920AEqFQBT8DP34p0FmF83aMHW08ovzFiu4MdlhcqrLnko0h\ncZTXHVyS/8JZh+o6SVm8R0/BBLF1MQQ5TqRkJehbmk6gL0+MSYxehUDKWTjJITkR\nifneTw/Ba1d0AXBOq0c0HFyGxMPIlWe4qn5LtxH5t0wyVGeSj4jyv4nvd3ZGuAgY\nEUa2uYht/z475k4+vf0YhV98iQH07GnmlfD2TDZgmOCQGKlNfJh1v88OZyLLa3dz\ngRHzGwKbAiJ8T8bbpZ3e2ozXxADr\n-----END CERTIFICATE-----"},{"id":"announcementcenter","categories":["organization"],"userDocs":"","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/nextcloud/announcementcenter/issues","website":"https://github.com/nextcloud/announcementcenter","created":"2016-09-14T10:38:53.939634Z","lastModified":"2016-11-24T11:21:50.324839Z","releases":[{"version":"2.0.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=10.0.0 <11.0.0","minIntSize":32,"download":"https://github.com/nextcloud/announcementcenter/releases/download/v2.0.1/announcementcenter-2.0.1.tar.gz","created":"2016-11-24T11:21:50.317635Z","licenses":["agpl"],"lastModified":"2016-11-24T11:21:50.386203Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=10 <=10","signature":"lmqeE6xBqUJfhuXPbjCfuWiIP0FEB4V/SsF/OvYar6rLpvDpJVf3DJoeIoxXurRP\nE9/xCcNN44P8PreRRDnFLCa0XsKOtwoGa56Lxk7IKvtiQG6xu4J6PKM+q/tIeF9K\nakw0LQXtjZB5InPhnCDDbY5YS9jgGEBylSHsgNgrElipcW+BzOBu1Amw4FECVlQw\ncQ83bio+YPZvsnE5+v3/bAx0m6QNxfyN9Sn6rMEqRkY3jfA3vejXGQH/XkputfV+\n5hOz48KbOVg7cKxg+ieJlSwC0aYjb+RXiopjc3icCoIF1llltOOeSsVYSflOb080\nupociPgQ6qIab/VNNXa2YQ==","translations":{}},{"version":"2.0.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/announcementcenter/releases/download/v2.0.0/announcementcenter-2.0.0.tar.gz","created":"2016-10-06T12:41:56.195206Z","licenses":["agpl"],"lastModified":"2016-10-06T12:41:56.263124Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=10 <=11","signature":"NVWYz73KtuoZ7ti2sluztJO5aFUc7PzhlDcg0VWyAQd1H7sk5wjw7i0bhrjw8O7M\nLsrb+PegnsL9eMlYM2WrRom+RF1PDP482xymZf1T8vh8qcTCm3TK89xSuiSm8yoA\niWUb/Uv/ODj74wVDWqWxAFKaAG/FestCB3InOOZQqQZLzlAV0U9ziYDGNzBjFqof\n9rLNxJ2IOqZOA7hhMIKhSrpA0KkSfNhBsVf8CWClYnVkZQiq0LoYkHkHIlXmXUr3\nOfQFKEjtsx+bNLa6CkAaocHGHJXAofX3GQZ9cjBsjZqiTfbXfcVk0kRfz7pwL92L\nI1McfJYvgMxDQG5bjRpNJw==","translations":{}}],"screenshots":[{"url":"https://github.com/nextcloud/announcementcenter/raw/stable10/docs/AnnouncementCenterFrontpage.png"}],"translations":{"en":{"name":"Announcement Center","summary":"An announcement center for Nextcloud","description":"An announcement center for Nextcloud"}},"isFeatured":true,"authors":[{"name":"Joas Schilling","mail":"","homepage":""}],"ratingRecent":0.75,"ratingOverall":0.75,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIDDTCCAfUCAhABMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwODIzMDkyNTQ0WhcNMjYxMTI5MDkyNTQ0WjAdMRswGQYD\r\nVQQDDBJhbm5vdW5jZW1lbnRjZW50ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\r\nggEKAoIBAQDPx4Hp1HdBo5v7bDEiVcv2UrVjNW+fPPKS/5rwbagtPcE/1v3WDcwX\r\nvFwaXk8qCn2UpPSQ2b1rTuTDm51G1ZmEZhNiio+rBfEe9F+3tLsq9lElqIPKhkAq\r\nEUVI6dcN+jSqvLmLhuwloEoQQSYaLrX75mY3lGqTb83h1l2Pk/brVixuVf4vJW31\r\nTgeieuGKnC+keLzKOrvTHffJakU8ktwB2Nuu1o+jN5a7u1bxKkP3LjEWPjq236hk\r\nAoOcW/wi1dUEyUKUZsZQeJyvTJh1UXdLHKwYywtUu1/VLZ1IUtNyPBfiQ8ukPp3T\r\nTnSSmG3ZnvsfM6DmAvLZ8bBQkMBzEcTLAgMBAAEwDQYJKoZIhvcNAQELBQADggEB\r\nAAB3i2NgiZ4rpNag7cXYdaFxAxdDWnke1+LX2V2R3hzGmx73/W6cKLpo3JBn9+zT\r\n1aEjlqkt0yHu4aAPVYQzOa5zIV8mjP84p3ODSyV9J8lfjFNXT7wdA8+9PVx3lVki\r\n2ONoCNBh1kOxnxI4+BsMlQfF00ZbBSuGcMm3Ep3lTFWXzuUn3MQITzPwkL5LkW6a\r\nsli/yAYQRTVDsXD8A3ACYT7BG31jGxyXtIHzqCci0MhZFdKKayMYkwfjZchIUtGN\r\nJJoU8LQoHwGRtp3wutk0GlFzpEQEvSsn/Lsvvot5IfIe46tnzA6MVj5s64s5G8+Q\r\nphhXFlzXqO/VxquPdbfYjvU=\r\n-----END CERTIFICATE-----"},{"id":"ocsms","categories":["tools"],"userDocs":"","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/nerzhul/ocsms/issues","website":"https://github.com/nerzhul/ocsms","created":"2016-09-19T21:56:04.745481Z","lastModified":"2016-11-11T16:29:55.864273Z","releases":[{"version":"1.10.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0","minIntSize":32,"download":"https://ftp.unix-experience.fr/owncloud-sms/v1.10.1.tar.gz","created":"2016-11-11T16:29:55.856768Z","licenses":["agpl"],"lastModified":"2016-11-11T16:29:55.947926Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9.0","signature":"hVzbkmmtJCtiOkZGe1mkWElqS3IPQ8wLtSzikVvoKmcg+Zq3YLQjpQWzy0t3UVjo\n9I/BfnL0bF+kjtGc9xF6M8IQaFqPrfJmN+lNT8WYIKLI97TTsLmJGg8Q8PAux3nY\n8/NxMjWdByMw9nVBClKo0o9eSW4+EnaUSJ62Gl/XWjq728kbB16WZm+iesk8LjJJ\nqqAgczWGwz6lkZTCN5o9n0a/YoLJTf4iT+OItHZyS609Cqaxx9CAmZPj/Xn5g1fm\n8hqO2ITAXLoBj4rYS/QsZTMcubtGkJ8fq3XYKVSv2UXZfvGsNWbbGV7puKN33uWJ\n5MrdoMlJ8XnJRPDlCBcb00LY+AB+hAMooLnNy765/Ew6ztp4KNLEPWGG+Ut8/Lkk\n0jIULl1RF/FjlW8P26NfwH36K30RCJFY06OFcWnxGBkkQaNFORDIsKcqTAxkl4x5\nnfKBkNdQZppCVfOSKOZj4NkWfWx75Ouq1S0QksmOsMZoOcjy1TbBKR8h6dt9DQub\nWpYBL0QwyQShGp0Vb1qCKkP69ZQAHVUJNzIFPz9LyoguvFyv8iZmAPLYDnFBvlf2\nnSHtA19rnJmZ4H7RJ02r6BdkstxISvEiHU7RLjNQxcb+DptIWX5C03wH87HTNIhr\nvptPorEoSY1KwW9fqUvvLE/c+vfkr5cvIEwZlyVKVXU=","translations":{}}],"screenshots":[],"translations":{"en":{"name":"ownCloud SMS","summary":"A app to sync SMS with your ownCloud","description":"A app to sync SMS with your ownCloud"}},"isFeatured":false,"authors":[{"name":"Loic Blot","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEADCCAugCAhALMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwOTE5MjE1MzU5WhcNMjYxMjI2MjE1MzU5WjAQMQ4wDAYD\r\nVQQDDAVvY3NtczCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANqZVIzM\r\nwBJuacuvgYKr2KnXuYhjKjZ58nfspSebsaGLr0ifBbo8L+NH5eaynnLCNhpegmu0\r\nO8D+KrbM1LtIkcdg1/eFpN5dTc6G2OAc9H9stmHs9nroF6MNhszgdZCz8Q8xkSoD\r\nGdSm8hdPg5GcfLrH27UilGtzdQlWJ1DralLMt3l+SfGJo152c/dc+e6SuT8+EbY2\r\nCeLdH5ImasXNpUgY+tAoEt2ZvhBrUghykBJTJVOjwL1jGLT37ybMtV4FBKo6hpeg\r\ntq/YzEk1ijBAC4pmoNWixDKCdolpVJVz0fijI9mlda3llurcp8eMhxfYJ9soXLHp\r\njvLX02YY6RfPcyy48uWVk4IEt9BvZWEVAAp7hCGA2yXrVSsR37E6sDbLsBcKav9A\r\n6dkGAgfmGkr2WT6O1/EhK/MakmnYO4WD1B+E7PnxtP/wOa+aQBmntQcd7igDiwzG\r\n6h05NYAWcRhqfZ4KWYsq0t0SezMbuHOhwzzi22q8wijC5YZbmhKSh+b3N8XwYKDi\r\nZaw+fSahPbRWaLyR3wn9zh7vKCwqrG3ugrNo6CtyoACAnmxKZ97ROFJIQTe3ndLL\r\nmv7Wy8iCZLhRYUaW/GKrF11AFwBVec9xmvkgU+PIKq2HSjwi9sCF+pFyhVjmq29C\r\nmZEPKUV7ySIpNHXpsXm8kTJJfqjSdb2ECbLfAgMBAAEwDQYJKoZIhvcNAQELBQAD\r\nggEBABvn97e8Nw8KAscf6FX/nZ99rEX+3IrZxTC8fmBgNwAvlbF2A+QZQcFI4G9/\r\n85nHK117+u7XDuwWl4QG3flWlI0hDE59Ud9Bd4AiTQ12VoXlNdYoTg/mXARxVozb\r\nKYqZ+1xRQclZKb2AqW8YiGo18okIKovn9VVRAFYPYx4O3Ve1FjgfsaMlIZLiXUFm\r\nkk+2qWo6kYsdU9FABLo6izx7RFOMbnYNre5FmDrWP1Dga/U7ErK/Dilh8g9b3HrP\r\nwP8OIZhdtFWw21wDTfyqrb9EhC/tsjPVP9u+bqyognHeiMhjbVYRbSvz5o8T7Mhj\r\nbxalCt4/LnMIfMwVyIvye7Uy2GY=\r\n-----END CERTIFICATE-----"},{"id":"rainloop","categories":["social","tools"],"userDocs":"","adminDocs":"","developerDocs":"","issueTracker":"https://github.com/RainLoop/rainloop-webmail/issues","website":"http://www.rainloop.net/","created":"2016-10-20T04:17:37.217555Z","lastModified":"2016-11-18T11:36:04.309739Z","releases":[{"version":"4.26.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":">=5.4.0","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/pierre-alain-b/rainloop-nextcloud/releases/download/v4.26.0/rainloop-4.26.0.tar.gz","created":"2016-10-20T04:28:21.491747Z","licenses":["agpl"],"lastModified":"2016-11-18T11:36:04.619927Z","isNightly":false,"rawPhpVersionSpec":">=5.4","rawPlatformVersionSpec":">=10 <=11","signature":"nTYIVSB6mIwKtXIrKoVGsOGFflpLjed8jFem1VLQNtXQj4bztnNrdc4YaPIn0yzM\nyLpMSqRDNzdYNFuOeDiyKLPJPTA++MotLCNjEe7kxUekek+m+qzgnGBdcT7RQT6R\np9xWGecnVx94d6aA55uiRhgQRyHpdDMMLCOz1be+HvpwHy69DRFZ1+SPmGUt6eW0\nu5yS0vHCu1K22cbrVNXFKjxAOlGcIDm61oQuz7ycl3uAujZO4rZbWt55jilgKGak\new559A5gTp9W+j+TWKIcg6LIZ9zLRlGjcQrWJrsc+OBZQcqiYimSFyO6HhfT9TPS\nPof//I+dSsd+H0SRGGeL8DvSnK+NKZL1q5EX5pziqsv6nZFITpCDwmAN+I8AnXXL\nSNkFi53M8RZTOABpD2x7YPYP1cEvwrRweqV/C/oHcYnpfh7D2DjFeWwXsjeAXrHY\nhgFhPrg+7rf7g6UmJFOCp0dC9sBdyQ3KtJkv7bGqPr854r2cdA7xW0QHWQ2in9qQ\nLhIczc32ECi3ZVVgyF8zyT4Y/3MRS05oX3FHvHyt88mjni6bVaO78F7ZRSha8gHh\nNOAkku7AMXPvUCHaZP2iVCCoAViEso8GeR3O8xh2G42Ai61RLYwx8LB1+23EoJTr\nmfFuRYNSg+qAKCokXNnh+lDlwu4AkaQo3vtKGPXvU7A=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/pierre-alain-b/rainloop-nextcloud/master/screenshots/2016.10.20-screenshot.jpg"}],"translations":{"en":{"name":"RainLoop","summary":"RainLoop Webmail","description":"Simple, modern and fast web-based email client."}},"isFeatured":false,"authors":[{"name":"RainLoop Team","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIIEAzCCAusCAhAXMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYxMDE5MTkzNDEwWhcNMjcwMTI1MTkzNDEwWjATMREwDwYD\nVQQDDAhyYWlubG9vcDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANqB\n5jnF9qZ/qjckt0kRjpHCOMtJumW/KiQoMeNP5nGv4ad0DS3KemOapUef8Zn7qCYb\nMnODhK7HBwPifFzI1j8bnT2hP6E0geFLb0MdN59d2NF0n4CCs1+BnepQPJ1kFbPK\n35wQRi0RDeTf/GQ+/owEVCU9a9W1P/VUXk8Z0vMoQxCXEdRqnB63SgsKl7DB9G/C\n4SYrgGor+OHVGl4ntMZhJujiM996DttrNK3iZRGkQ07L+lfUIwQ52XOhQNRdic4p\nB03lw7PpChwPGMv/EEvdR5HpCJQBJniqJbbu3Jh8bMBKTE/8fCzN3vMXICB2g3Bq\nlKkZW6fnJRGsrZ79fsQnl+WBPNSrWRLOxOfe1fyCFV1ljFB4nTH7uF3pC8ZRgJes\nkHIESHz3GJm28hn4+17ESMGHBCbs7L9FK2GY31cobU0VRntLxpSG+d9njbIAgMG1\nS7U+oKVFQhSVpdXNOaUNqhcQ3HkbQTLEP0k53A/lhLQb2+KPd8nntaELjwNyrmZg\nsVMgHj/zdlvrbguZjZFzUzDBFvkuv/5M58lNT/D1C6ufVp/R6eLsYI+nnk1ojAjz\nl7N6U8X5SXpD+Bm7+Kn1PH+bHl7cViCx8oXJXO2RhP+COXckw7BDZKtjItYHNG7M\npFwgYqWpvCu9LN6IN5a/eLqSI76dOOP3iYbaTH+NAgMBAAEwDQYJKoZIhvcNAQEL\nBQADggEBAGB0Vq0l6ndGTgNbZxSEFyBR3u3tiR3pWK81DYjsui7qBoO6P/BaGmf+\nraSwHPaBOwA9XNS8jcGLh5xdqY2p/m0dTS64xNjVL9nweWsG+FwVnPANo8C4nXdm\n9ajJ4cdg54stQK8qn1uh/xPcd23GKfYJazjYSwYmZ3pXXdzlGN9NxkeYJQxJ6B+5\npzAeVGiABI/e5URpxzz2UayRX7EE+vtpe3B84hzkLqsq0N39ZN6KLfaTyEBGLzqE\niLYeXQTV0XSRs8xVt+iyGlj7nPkv2DR0oCqRpWUFWeSBI//niDG5WxS3qg8kacSW\nfDSYhSN+IjrnIkwNtc8V9t7/GeQB5FE=\n-----END CERTIFICATE-----"},{"id":"richdocuments","categories":["integration","office"],"userDocs":"https://nextcloud.com/collaboraonline/","adminDocs":"https://nextcloud.com/collaboraonline/","developerDocs":"","issueTracker":"https://github.com/owncloud/richdocuments/issues","website":"","created":"2016-10-31T08:55:45.631429Z","lastModified":"2016-11-24T12:13:53.905352Z","releases":[{"version":"1.1.3","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=8.2.0 <9.3.0","minIntSize":32,"download":"https://github.com/owncloud/richdocuments/releases/download/1.1.3/richdocuments.tar.gz","created":"2016-10-31T09:03:40.389355Z","licenses":["agpl"],"lastModified":"2016-10-31T09:03:40.439510Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=8.2 <=9.2","signature":"s5giQeiU2zwV5X6FmxWXiG9LtNDeKBlFqK+hfvGNbGZ+nic77Y+AnXHodV4lb3Ko\n0C0ThFLuafaZRdp9rBIN2K/acCfCYKJewGuYErb7FlEl+P9J4OQbb9pva0htZJw6\niuG5eyeTufi5MKB4vuj4+jo9zhepOFAtZMa7o+ZCfJkt8vDBuq5AXxomEiZRtW+n\nf9PPUnq0z7DJVwINhHvvBZJlSLjkpJ6VIHAr+/ElWr8O/mDKq5S5ohbvpDcPqR7b\njnsBckFDLFUz1FX9dA0JCJEKMMfkcfGqZcjH17NdjKAxRW2soN5cEKluu5MkOhz9\nFEPKfshzbrfUIm5MaFGv6w==","translations":{}},{"version":"1.1.14","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/owncloud/richdocuments/releases/download/1.1.14/richdocuments.tar.gz","created":"2016-11-24T12:10:13.337165Z","licenses":["agpl"],"lastModified":"2016-11-24T12:13:53.963638Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"prDGlfRPxqT6LP0BsAFPwGww7P4Bngha2N4u5B6+F02N+RVOjGtTcXKqvM1KjZb1\nCo7qJvgJmjpvIvDmB+rup02i8ObfwP2ct6UdsD7ouzOWJG2sJANXK31bHyvOmQ2h\nvKu5eNcOkf+WFyFKYi51TbsfWn2+1Wge3WWujKAVcEvqtcOOz+uMWNtqzBptEupk\nE1aaRnQfTx488YB8Ubul06LIY0PNCHgGCWPgy817tOVT7JA+V0P0FFonl/PXE0dr\nWgtxRJmvGaNiFzYq+kQmdKMfayZTm3kdVgP0W52t5wp878K0i4s2KPg5lANvjTz7\nDCT+VV2IGIE52o4RpMUGyQ==","translations":{}}],"screenshots":[{"url":"https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-document.png"},{"url":"https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-app.png"},{"url":"https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-presentation.png"},{"url":"https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-spreadsheet.png"}],"translations":{"en":{"name":"Collabora Online","summary":"Edit office documents directly in your browser.","description":"Collabora Online allows you to to work with all kinds of office documents directly in your browser. This application requires Collabora Cloudsuite to be installed on one of your servers, please read the documentation to learn more about that."}},"isFeatured":false,"authors":[{"name":"Collabora Productivity based on work of Frank Karlitschek, Victor Dubiniuk","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIIDCDCCAfACAhAZMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYxMDMxMDg1NDExWhcNMjcwMjA2MDg1NDExWjAYMRYwFAYD\nVQQDEw1yaWNoZG9jdW1lbnRzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC\nAQEA1jk29m6JykcJ2Ld0YEpjPMYh6kwxY6GysNJnfkA/th7tPWL3+vBJ9oTYyVnZ\njwAE1Cqwfa9MyBKMZ2IdfIqtT8PeWzuFP7Ib942EdxUpwwh9F3lykeGsj0h4zQwX\nF9OooiS99PfLX+JpkKm15Ujb00iLB6xQmq0+3NeOT1CTD1ziJ1ueOcxBKMwaFp2a\nPuz3F5ywqCvpmxG/OBuOs0LI3/zStXhBNbUMxBrWblr7zaVNJXl/I2JCKj8Wah/H\nXUEEGbW15fAUP1f+90eQSxpEoCZDBHXOQCTJYzySGv+BjU+qlI9/gS0QbrsiyzUf\nO5lyvi8LvUZBzpBw+yg1U75rqQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQA9jU3m\nZmD0ywO3MUsG/GLigFtcWi/p7zp2BliR+NpuY2qNFYDcsIb8ZUudmUc/cJRRctzy\nAPaLLj/d+h5RFaxjTVvim1PSe6M7urK/IMSvyUVYCeQRYpG8ZJixKTCOVIBaWHMz\nxTfc51tm9EPlpJpK6JtaWrYYoWGE3k9sINdJ4JkvKkE2CBAqVhX6ZGyEQ0bnEhtk\nRu1DXn+LW7TJ4NZ8VtLWvmW/6Kfmi7dQ1V++Kmn0lO5ntRt5altePbStCHC8bhGp\nmyBOrjhrJgLIwvgH26MYZhdiSkFzoE38nMPZdrUmUDxcPCwucWJqgzDPudguFthj\nWCVZ3TTG/2z3+tWM\n-----END CERTIFICATE-----"},{"id":"ocr","categories":["files","tools"],"userDocs":"https://janis91.github.io/ocr/","adminDocs":"https://github.com/janis91/ocr/wiki","developerDocs":"https://github.com/janis91/ocr/wiki","issueTracker":"https://github.com/janis91/ocr/issues","website":"https://janis91.github.io/ocr/","created":"2016-09-19T12:07:49.220376Z","lastModified":"2016-11-21T11:22:21.024501Z","releases":[{"version":"1.0.0","phpExtensions":[],"databases":[{"id":"pgsql","versionSpec":"*","rawVersionSpec":"*"},{"id":"mysql","versionSpec":"*","rawVersionSpec":"*"},{"id":"sqlite","versionSpec":"*","rawVersionSpec":"*"}],"shellCommands":["ocrmypdf","tesseract"],"phpVersionSpec":">=5.6.0 <8.0.0","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/janis91/ocr/releases/download/v1.0.0/ocr.tar.gz","created":"2016-10-24T06:50:43.283900Z","licenses":["agpl"],"lastModified":"2016-11-21T11:22:21.269108Z","isNightly":false,"rawPhpVersionSpec":">=5.6 <=7","rawPlatformVersionSpec":">=10 <=11","signature":"CBJkCIiUKyf2NuWfz2zJ3grhf8p7wJes7DPV/OxUzhlxIH0Fh7K54+U5A9JOOi6f\nWPhjXG1ylkyIVY1glr/B8svWNsD4jAclpnUi1/9ZW5UPT8LnRBfTbtF9Uoj0OgNs\ntsGQYbpuREoHnjbJWTRe0kq1OsOfX44xuf8PuX43B+lpQPW4iRSSz3ZIhdPcDGq1\n7pyqQM7gdKhBQ6/tOiwd7Enyt5Hi4V6jhwhUOCYeTNiLD2V3yKL+qA9DzpXUfNNw\nLGTjcaMrifibHQIZBZWbPPMmCfMJZ7GO9oR4gWHwkhWqt0yVWAJXAHJBLd5vXC5I\njtRTXRpHO/k6Dtqem8tZCVoDE5MAC7fDZ/0XzoFiXHciP6MenVasVcXo6xJOJc5y\nGsrecNftUEhP/ngxA6lMBVkLmmdpiexVisvsavPi64i34OUA6qOuxjgNVBDwg56i\n2lOEVvHa3nn0UX7ZZoQ/Nu6Mz7J3Hx/VDlttPuWe42eeJAphyDGubT1M62gW8dVB\nD3tJOF7spnK6I3BhVLviou/zs30AIRVBDTU0Orzx78cbInwy6/vyJib2a1olAaHz\nv05SzlQRnBWM4jYBe0mA/2ds9AO6VrXGrT/iLlHemj6JYoGBM185TGewA7OJyX3a\nHSlSDqaremmi+aS3onx3AKhXykDxTRkMVarePwTzzFs=","translations":{}},{"version":"0.8.8","phpExtensions":[],"databases":[{"id":"pgsql","versionSpec":"*","rawVersionSpec":"*"},{"id":"mysql","versionSpec":"*","rawVersionSpec":"*"},{"id":"sqlite","versionSpec":"*","rawVersionSpec":"*"}],"shellCommands":["ocrmypdf","tesseract"],"phpVersionSpec":">=5.6.0 <8.0.0","platformVersionSpec":">=10.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/janis91/ocr/releases/download/v0.8.8-beta/ocr-0.8.8-beta.tar.gz","created":"2016-10-10T18:01:16.076330Z","licenses":["agpl"],"lastModified":"2016-10-10T18:01:16.169733Z","isNightly":false,"rawPhpVersionSpec":">=5.6 <=7","rawPlatformVersionSpec":">=10 <=11","signature":"uEvhHfQCrzb6z+QuOoO8rYXiMsZFkrFWEqDvTyOTSgFKvo7dVoj3EfDfaApgcKEB\nIM/SqjLSO0lNhrp8F2mST3twbvLDprKsfrDWKFE6eiH0yKl2aNB+cHWE27utARaX\n/QZBD114vbWeDnbaBa4b9OwtBXDqKJrnO1LmqSLFP8guAlVTkU1jSPkRTpmwAcAZ\nJA/aiN/D2LSGfiNp/YdeTuzU+gPINIs9dCb6+PPkyam8PCBaXUSSaW+c0lAQHln+\ntb3EXxZ5YXdjPWrpEyHvFLk1N8s/w615QoMxr5fEs1M8D29aGbcL/wu7LXH4X0Yn\noiWwIFbpfrpJQlrIFumxWZR74JXiNr9J7ijnQ7SjxdHCcrLxMdnZ2cwq4iD6PnYm\nnIojhlhPOqUIzsWYCYutLWDQbUQz9eyWbj/+7XL+5KjetUUr/MnCu6xJ27IqFbAX\nHc8KRCO+9I0/qMQ2/rCZXBMeo39MGhhkgkVl5YAKwC1IEN/jlfyVNXZwYlfcHLKj\n6aNQ4zN6gGOerWWZ8qXtOeNJN+qv0nmXUKrZdnZUAhxOdB4G9Ym+JujxJZ9yNIWV\nsiqAI9J+OIzCwv/dzZhaHadONoo/RTF+Fl6Hy56HyBtMehb8w9p8ksVediqf33yt\nFAE/tzKtNK5NiRd+8MZkq/GbocaFUv3C7Y6pLMpTE1c=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc1.png"},{"url":"https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc2.png"},{"url":"https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc3.png"}],"translations":{"en":{"name":"OCR","summary":"Character recoginition for your images and pdf files.","description":"# Description\n\nNextcloud OCR (optical character recoginition) processing for images and PDF with tesseract-ocr and OCRmyPDF brings OCR capability to your Nextcloud 10.\nThe app uses tesseract-ocr, OCRmyPDF and a php internal message queueing service in order to process images (png, jpeg, tiff) and PDF (currently not all PDF-types are supported, for more information see [here](https://github.com/jbarlow83/OCRmyPDF)) asynchronously and save the output file to the same folder in nextcloud, so you are able to search in it.\nThe source data won't get lost. Instead:\n - in case of a PDF a copy will be saved with an extra layer of the processed text, so that you are able to search in it.\n - in case of a image the result of the OCR processing will be saved in a .txt file next to the image (same folder).\n\n**One big feature is the asynchronous ocr processing brought by the internal php message queueing system (Semaphore functions), which supports workers to handle tasks asynchronous from the rest of nextcloud.**\n\n## Prerequisites, Requirements and Dependencies\nThe OCR app has some prerequisites:\n - **[Nextcloud 10](https://nextcloud.com/)** or higher\n - **Linux** server as environment. (tested with Debian 8, Raspbian and Ubuntu 14.04 (Trusty))\n - **[OCRmyPDF](https://github.com/jbarlow83/OCRmyPDF)** >v2.x (tested with v4.1.3 (v4 is recommended))\n - **[tesseract-ocr](https://github.com/tesseract-ocr/tesseract)** >v3.02.02 with corresponding language files (e.g. tesseract-ocr-eng)\n\nFor further information see the homepage or the appropriate documentation."},"de":{"name":"OCR","summary":"Schrifterkennung für Bilder (mit Text) und PDF Dateien.","description":"# Beschreibung\n\nOCR (Automatische Texterkennung) für Bilder (mit Text) und PDF Dateien mithilfe von tesseract-ocr und OCRmyPDF ermöglicht Ihnen automatische Schrifterkennung direkt in Ihrer Nextcloud 10.\nDie App nutzt Tesseract-ocr, OCRmyPDF und den internen Message Queueing Service von PHP, um so asynchron (im Hintegrund) Bilder (PNG, JPEG, TIFF) und PDFs (aktuell werden nicht alle Typen unterstützt, näheres [hier](https://github.com/jbarlow83/OCRmyPDF)) zu verarbeiten. Das Ergebnis, welches jetzt durchsuchbar, kopierbar und ähnliches ist, wird anschließend im selben Ordner gespeichert, wie die Ursprungsdatei.\nDie Ursuprungsdatei geht dabei nicht verloren:\n - im Falle einer PDF wird eine Kopie mit einer zusätzlichen Textebene gespeichert, damit sie durchsuchbar und kopierbar wird.\n - im Falle eines Bildes wird das Resultat in einer txt-Datei gespeichert.\n\n**Ein großer Vorteil ist, dass das Ausführen und Verarbeiten asynchron im Hintergrund stattfindet. Dies geschieht mithilfe der PHP internernen Unterstützung einer Message Queue (Semaphore Funktionen). Die Aufgaben werden somit getrennt von der Nextcloud in einem eigenen Arbeits-Prozess (Worker) abgearbeitet.**\n\n## Anforderungen und Abhängigkeiten\nFür die OCR App müssen folgende Anforderungen erfüllt sein:\n - **[Nextcloud 10](https://nextcloud.com/)** oder höher\n - **Linux** server als Betriebssystem. (getestet mit Debian 8, Raspbian und Ubuntu 14.04 (Trusty))\n - **[OCRmyPDF](https://github.com/jbarlow83/OCRmyPDF)** >v2.x (getestet mit v4.1.3 (v4 empfohlen))\n - **[tesseract-ocr](https://github.com/tesseract-ocr/tesseract)** >v3.02.02 mit den dazugehörigen Übersetzungs- und Sprachdateien (z. B. tesseract-ocr-deu)\n\nFür weiter Informationen besuchen Sie die Homepage oder lesen Sie die zutreffende Dokumentation."}},"isFeatured":false,"authors":[{"name":"Janis Koehr","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIID/jCCAuYCAhAKMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYwOTE5MTEzNTAxWhcNMjYxMjI2MTEzNTAxWjAOMQwwCgYD\nVQQDDANvY3IwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDDpXiwec4f\nXAT//7YBPSb4z6ZsBJSMfBq0VTL/HagjJnQ7BL+WagzWlS69IStNDqlIlenamYRX\n4B40heJIUinzYKjTRbr5UAw6MX29HibZccm/qgrk36o1XTgIsoRhmvSxbXDVIo1k\nbDOJN8gc2Gvswa8X+uOe9pfcDgAdqGxOvFnoKW89GnB01pCNT+xakNErGAFqVLsr\n2AeademAZnbxJ1cB54tQn2Bygb/7DKKY8EmFfIq6/27n9Jbph1FG9HIlWRT4/M2H\nU2pG3cCScWMEBPsW7kpfpnzLk7Q30Oj6k/rEYjJgmNYgg6oVnn0D9uRmhBYBnGyx\nMab1ilsK53lyuzQY0pmU8V5ULqpnNFAK6DVFfofEamDUhBPO+TZXEA5cZmuULRpf\nQQXmGpUQSyV6pS9WirMIqXFp9wmQ4vtjMdhu/6CP7cmtYZdq9uOhWEHbQM0mZUkb\n8hMjeItPx9XITI7Cge1JUOI8ZIwiB3USnQXcMd3v82l++/VgqHB7s5OaKPhygsWI\nM6RCoBcGiuQB5/fEUOg5ACOpGVyJiBda0Mi57AdoxdJmfnr7Bxcf2tAWIJL9Y7T3\nE1+V2BMxJOWwvVz26Cq83F41yXK2hJS+SbfQTqNUR8Cfh50CS9POvgRxNrJK9yvI\nkKle3ITRtGVM1XU0njWjnsdGg3D3O2mmjQIDAQABMA0GCSqGSIb3DQEBCwUAA4IB\nAQAbFddMbgfPI1szT57V1FKZrOrdYqQ7qjewlIQOzshGydbMtqS/9XL5hYocJCMt\nY6w+C/i6iEzO2Jx8D/k4rcZMXoVR6y3ZvO0Ke0gzSRsU+5eYj2FK1VV+cNIQW5Iu\nCYYIVa7pVPVHdeQH2Bba680bLV0HMF6b1fI9IwkfdCAinvCYZLjyEXZlmB7YjyA8\nHR7qPCNz4uG2Va7mlUHE3UYUYnlv8JFOV3YdbVL0nxhWwIdzSri5sxFIhdlabpzY\nyA1z/MCBEyTRo80jxFmL+MpwbsdbUJi7Qxlnd56zb6HHDGrLHXZTh9LXgyVbnhWL\nkxomWjIXQh4aMHQL4QF7U4EK\n-----END CERTIFICATE-----"},{"id":"spreedme","categories":["tools"],"userDocs":"https://github.com/strukturag/nextcloud-spreedme/blob/master/README.md","adminDocs":"https://github.com/strukturag/nextcloud-spreedme/blob/master/README.md","developerDocs":"","issueTracker":"https://github.com/strukturag/nextcloud-spreedme/issues","website":"","created":"2016-09-27T08:43:07.835196Z","lastModified":"2016-11-21T16:51:23.703819Z","releases":[{"version":"0.3.4","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://apps.owncloud.com/CONTENT/content-files/174436-spreedme.tar.gz","created":"2016-11-21T16:51:23.689599Z","licenses":["agpl"],"lastModified":"2016-11-21T16:51:23.826509Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"Mhy3hXeGWlIujx1Op39MMRdqHYOo360BCwr4FPWoTNNggH3aS0gWlh48DAfGYK9W\netNiOqIuRyA0NrVlsqR2vDILgFtODJSbKPyHd3PQn3hcGsjogjQ+dkKciLNLinw7\nOhbv6aDdRFLBeRHpX/7wOnWL5W3ko/gyn0Awvi88M9+nC5aARtqncQqPy2SxDGzH\nKlOZHSNDnEQCGMhA8hNWWKdVwNUJHod/wmBWpW5QVNSJq5DqrKZcNwpGM2UUJoql\nEqUMwDXk5uVH5r5k62Tr9kguDWoUEG1OqQSyeMY24AmA64tq/HSlAdZ+CX32bc4E\nZvm+n8poJBrdSVmWEaa4ZfYaLFdOc6Kcuid1B1Sv9kPhD9WD6T1sicdzjDzcorBK\n/MLReCuSb2E8aPTnFWRoAZ4xCUGs1IXzX5fmxI8VdzwR42R6RhGJ/rqMuZRFenZF\nbOks45K5gE1da4QpkYOUQa3GVMNPqPiT3CqjmJ8tjxq7bGpb6v+YoCLACjjPpPZL\n2Y28qLxwHVaINDFUUxD75WWdrlulRbqHwiSw8jolP9qrpXhDuLAqYam9tRwV5K5R\n8uNawnFwWkicBEYkN/WtBTouWzehOPn38tHXov6SyEyD6lkuxUBZrsGQ2ru+t33U\nk0kKCbV0GFw43I+3Ji5DiB4TUVNZYVoPG1B7Qve+UfA=","translations":{}},{"version":"0.3.3","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <11.0.0","minIntSize":32,"download":"https://apps.owncloud.com/CONTENT/content-files/174436-spreedme.tar.gz","created":"2016-10-20T09:09:26.520692Z","licenses":["agpl"],"lastModified":"2016-10-20T09:09:26.666738Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=10","signature":"D62Ck7JUnrYbrfFlX7xXVaYUMZIh2acmykIKapqfemD/tuX5Bvb08GYGTeFG61MA\nQzsqcIylDfGnC1UJbf8yWEX7PbyJD5w/R4WlbFv34njDvM8rBs4HpzSjkqQoykOF\nZpYAjH2ydfKqtZadgoIRm7et5B8X2AeoGg11ec52DId5t1wAEBcDIv824CDBUt8t\n0pVY8Z8n1MUYwU7DCjCbPy23br2+EBODFCHp+cFfMBLg3F0BJI5nY3Q8ku+0tqMR\n0NDxQcscNZ2Ck/wpVDWylfhpS+ICIxSMiyq7urP593mRrK3399SUyaMqDfgl/pxo\nqTzdBxHLaAqcnKZYglbqp+Gxbyj4teqCod8TiSMlp90VaxhC72ACuVQQRWQKuTNI\nZeW3YweWB5d7VErqBNmQR1tGnX5YFFHiKo41fVDQFsrOqHx4zP6AeU3nkl2ol/r/\n3pg553so1MOxMkyLEhGYGMfrdQqVEtajNWHUdj3B73LS+M3jcjBFIdOD+AGXPtDX\njCRymt07c1znhkL+aT8yY5SHMVbKBZj9mExL49hcLjAYYc4U++60uq9MFH5r9g4T\ndph+yT6VVEM/UH2HjvKsHv2wm937sNgG3EXQdh79JU8nCXIz7cVrJ8f5/9r6n1VP\nBbjtfDAPEjmfVCXX2gmgLuZHV+GMhLBS9bTh+61AhhE=","translations":{}},{"version":"0.3.2","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <11.0.0","minIntSize":32,"download":"https://apps.owncloud.com/CONTENT/content-files/174436-spreedme.tar.gz","created":"2016-10-06T08:14:05.212553Z","licenses":["agpl"],"lastModified":"2016-10-06T08:14:05.278533Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=10","signature":"X9zXDyMBPoXPMpZ+XXWK3MLufjY2MG8lJ+93LiW3rv0iq9yd8PafK4IvP9czO6o9\nf/vNilq+1mfl6mjTvL6QF5+sySlzbRGbT3uTBwYXyYL07HVYgl1ZLrwe0kxvxqaW\nxTvPem7+HzwClI3VnWc7ylQfzGrcYIaSIg7nNq1GOHocsgZVNyj/nVW/eQx24MjZ\nuLzZs9SJqYoBGq+mo63vRswhqv5OzGebo+G6dHm0hvRSOw9qsWCDWBugiSRU8zU4\nD9PQ0e8WbyrIrQhBoUvvkuijO3zCySx606S1HUyaHmbJzMc4Fbpwz6ggmi6IRBbT\nFBKB1DWJDwN/7mY4fhS4KhircVnAHDqiBVCTu5i3pSfMPrwFymcmbn9OBuFHAFuZ\nd9PZvWQg4v32w+Q/NNvZVW5lRi+l0w5DEqNREaj79hljk2reZMaB65lvtV9NCYw+\nHmwWqsGqZ1SgGZuhYkOzEIkCfJ2fF/VpyavJ4X6bHP9yYdkt1pxnSSoZ2HC8mkG4\nBnPf28mEXRcY8EJv0rEePqKSBIhAt8yfEW+joH/8nupe1qOdfPvP08ifLad5m76s\nt23UzlSljzq9kVO+d16z2uagKomN9USZaNnJcUDVblfjvCPpdiHLfRPEJnRsDZCm\nNffFWEMcz+TWmwBboZgTRO9v0bPDEuwfCCEW0zy8rT0=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/conference.gif"},{"url":"https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/presentation.png"},{"url":"https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/import.png"},{"url":"https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/users.png"}],"translations":{"en":{"name":"Spreed.ME","summary":"Audio-, video- and text chat for your Nextcloud","description":"Securely communicate with your friends and family using rich audio-, video- and text chat, and much more right from your Nextcloud – in your browser"}},"isFeatured":false,"authors":[{"name":"struktur AG","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\r\nMIIEAzCCAusCAhANMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\r\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\r\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\r\ndXRob3JpdHkwHhcNMTYwOTI2MTYxNzMzWhcNMjcwMTAyMTYxNzMzWjATMREwDwYD\r\nVQQDEwhzcHJlZWRtZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKLx\r\n2dCPBLIgX948BnOdLij0YyI2+FKD6uZOvzxMaoi3rlxNf8MJgraNMzTBWEXtxT5b\r\n7ZISNp89WEXhaQ1dwwCocodd/xow4Ek63m5nUvTZXsm+YSbMgrFbxzsBhYU7KuIE\r\nT/jhKdzYgemzErwwN/gtwkLMfPo3jkgg6c8NPPohYv6k7V4VnsqtJ0JS0kX19FqM\r\nMiNz9XkcncBHy9x0BSxy4+YnwbFcgIx/MtYKlBL8NkPuuJaB/6C1O+IPYhdEdnpX\r\n+RaIue71nSStOYOqT4YDqHAIw7EmqgA1my09mmK+0Pn92GJVEAEN7JGBSQ+F32RI\r\ndB3ivGAOVtUtVvJlepWdbHxj1xqeP+LCjWzHMLQjm0TyH8VqU4Cg/wxwAEFnBATH\r\naOaWwrggzY2d9KBo1mp0k71NArLbBdlHykFU4bgiSDWrXXMz0fZzLQVwGI0Eqcxc\r\nouf6t0kvrK8oKjrnso+FjBoT7lHV/H6ny4ufxIEDAJ/FEBV/gMizt5fDZ+DvmMw4\r\nq+a088/lXoiI/vWPoGfOa77H5BQOt3y70Pmwv2uVYp46dtU8oat+ZvyW9iMmgP1h\r\nJSEHj1WGGGlp45d10l4OghwfTB0OSuPUYwWR+lZnV8sukGvQzC9iRV1DGl/rREMC\r\ncQ5ajRAtO5NPnThvN5/Zuh4n8JoDc0GK4jEZsIivAgMBAAEwDQYJKoZIhvcNAQEL\r\nBQADggEBAGHMRbPV0WTI9r1w6m2iJRrMbZtbBb+mQr8NtOoXQwvSXWT1lXMP2N8u\r\nLQ1a8U5UaUjeg7TnoUWTEOqU05HpwA8GZtdWZqPPQpe691kMNvfqF64g0le2kzOL\r\nhuMP9kpDGzSD8pEKf1ihxvEWNUBmwewrZTC3+b4gM+MJ3BBCfb5SCzMURLirfFST\r\naxCNzc7veb2M98hS73w5ZE6vO+C/wz0GTsxuK0AoLitApT5naQnjvxSvSsjFPEGD\r\nsUNUEU2Decyp0jxLVnrrpz6Y5UupfBR0V8yAv1t5Od/mCKLc5DxHsDWiKOpsob9U\r\nJN+bdzJil2NNftihD4Dm7Ha7OS3O8W0=\r\n-----END CERTIFICATE-----"},{"id":"nextant","categories":["files","tools"],"userDocs":"","adminDocs":"https://github.com/nextcloud/nextant/wiki","developerDocs":"","issueTracker":"https://github.com/nextcloud/nextant/issues","website":"https://github.com/nextcloud/nextant/wiki","created":"2016-09-14T14:34:35.977699Z","lastModified":"2016-11-22T16:02:57.758477Z","releases":[{"version":"0.6.6","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.6/nextant-0.6.6.tar.gz","created":"2016-11-16T15:11:14.344704Z","licenses":["agpl"],"lastModified":"2016-11-16T20:39:59.030384Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"aOZeEeThyZ0V/vXBcn6c+Z0vyCsZcN6nfSJ8oWEea4zXh4g705Si+MFZESqix3M2\nOPCnA/U8eASwdRTAEwQJrW5ECmu1THXSIsrzQzc9kFycvyOGzCgAWtuu0ayzZD2/\nU5aDWlzpLHC1Czg9QJ5UnfZR0AfChWQ402N1YzGqMShdJv6AHXFrVE+uYnIyxuYI\noPJQBUYbQwthVUjpYwFwSxw50YU17gmx5RZ0Y0OPz3i/EiuEUrxopXtfDVYAuCML\npDw37LOTRQ2JqxSU3teALh8LcrwJbTeOP0n4bTeV+vU3jvtiaEoRrwfVrK41F701\nQymGXy1/EFG0kxPGS2dRNPBAXYLZfeoWlROl3D5BWlbsCcXKU1S+22yn0TEdS7x1\nY44x8jRKnBddDE7qkn+QoQYHNNcxOREsFFLmIoyCUpdNOdDX2PvTFUYkIqdnXaJy\noAKv2GkvWPQ0aiiBtA1i4oXuzvHW/M2wOrK7v7DCpNfILrD/sjxpljxcX082nRCd\n9P3iPd2hQ6yOM9fG21LVN74b6wggI81BzFf/xJPd4ZqYLjfeG/yqd0zaiMOzMm1W\nse+kc/a4iB3BoCNX3E942pBBzew4ya8LkCXdCHUUsuelDf1va1ikTh/G7D84ll9/\n2avNqQnUh3hgOnxFCLI/5VrbqxfSTVdO6O/LTuAmwgw=","translations":{}},{"version":"0.6.5","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.5/nextant-0.6.5.tar.gz","created":"2016-11-09T16:58:06.856332Z","licenses":["agpl"],"lastModified":"2016-11-09T16:58:07.139404Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"DVOIbLEVggiLkNkuPW+pXqu8WYT15unUsMoqHSw81NiU6HF0Nuf3XiwnHJJDDqo5\nyX+QyHADO4ZiQpvXhGigvwD2eS1jVLatAztyxE0tEQv5eBU/7R0jQYxI8YCnC/jE\nZDa0qs+TI58EkDek0LBzueVQqrLubKgGU9P+E9H8gbWi1JHvl/2LdY7CplPqaJ+J\nMRokobPntzgx9m4DZC1RsCoXzSON7o2gp2cmunPJiXVHPhMUfIfolGEbNGJ1/xdp\nra7Y7XkPnDx4po98a38UpUh1x/2m5goOV54em35bWbh4ShNDykiE5ttz6tOywlYN\ngxceSsStTKyqscVaOV2Xu6Ive0pY9CInvrSfRnRktIWBYDyWdbK9sJuqs/s69kqn\nKQ/SjzE2smw0zwOUMnSaz0Jzr1vdPFgNu2xDYAVQO5G03V+wQ5AhxuhBz5Xp5Fll\nLaOhymZLCC7lq0DUqkeTeQ2QCfiG23hvG2VUPsIqW7xFe2YzKHZVXi9JuH//Gwym\nDmJmcyZDMvNwNiObx3ZRKsZNH2XwbldFZ9nTpb9AafyoSR/qbwd473NewaDLRTiY\nLrOP5Wx1xx6DOkRmDF2l2iT1bSJ6eoAoWQU2I0aYRH9NAr2Ugd4f2Um4o61EJaL+\nRHT9cERRySEloU/NdgmZEOi+CG0rEu+9LC5G/jGlHE8=","translations":{}},{"version":"0.6.4","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.4/nextant-0.6.4.tar.gz","created":"2016-11-05T18:17:47.622023Z","licenses":["agpl"],"lastModified":"2016-11-05T18:17:47.678445Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"RdkvnhNjw+kAnT6Or3+N9FzAv9DjJ9BAlmgANMwZZcaqo1gZRFewsGD2Rx1KEb9X\numSC28tl2B5/3r/+dprVJmOnYJny/7+kDmI/d+vigKfnaQJOUZ0ya5+f72pFgow7\nth8fw9rX/3+zIBs2IeEN66cis8ioFq97BJDsnDMBDr7wl7CnFJjYe6eviWuiFTnC\n4sBXlYjHoaIRRu561nwAooV+WXmWsparYPVhj2cXdyP/CnWo5HSF5jA51WCsz7Up\n7a0URXdh85xmxEbZtnjUymTW2BIegdxj9Erbfiuy/m3ApgnP+DiEQRcM13J7pXqg\n4cgFOBSzKDZgim599WBW2uNO1ztnDYOzz47GXDfJhcdvKiZZoQpUF9W4LMRtheMz\nxD9YArO3j3d+VOInSYU2Rpvhugwo1LExhwnRdT4+cOZfEeq0VojiM7yBZLDdEjIb\nGdYUJtNWSU0F6cPab2Au8FgZymLrHL9EpGvxuA1oAwtRxHAgMElJG2O6Jp89gGl9\nh/AptypeTvzNEc9/Kg24ueBKqmSUd5a45pZ3gM2pNATJhUK7fzLb/K6cq/kEzZtj\nOPra1ZfP0/20u8VP32Rgw1cFmIjqt8DFzUmOMpMfyoJkdldtTwQtGk+yIvtN1zp6\nT2zDknAKA2N/rZ/0SJl8KxVVNLhQWtYBJ+rFAdapuxI=","translations":{}},{"version":"0.6.3","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.3/nextant-0.6.3.tar.gz","created":"2016-11-03T21:51:27.654342Z","licenses":["agpl"],"lastModified":"2016-11-04T18:25:35.697130Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"Hf5GB4xd+rVXzWvVpGbbF5tqmnI+DGHlNHdLYPImFLS/Z4K5wKeNp80E5sd/RkAi\nhyuEsdWHlGDVMT6s7oeCmH/ClyWqLNSz9VH4KYqyFgD4+usHZp9PrEeEKbvPDPKv\nD3eB7Ats34cWcpf4E1oR5wsPicgmdgIgb2uMXzc/1G9xUBRWzocwCstzjEEAB/VJ\nvJuHvhDTGG294P4gOb82MxKCQ8LZ4i1QXzOf/mLETOubiUbZtJgTReYvpdAo2Wct\nbdfDFw13LYZkCf71r9jIQ3PSPlIpD+0BwAlE1fi0Br9dP2JjIfiKN6CGVaki6O0v\nKR42jtcE9xXiAop0Ym1FYMWJvQUy5PFLMwYDfEd6CvfEFJl+fi+RjXNDNZcTyw00\nHa48sACoGzxwts2JknWMU57mwvi0Z4uwpE0cFp/PRzBsXmSlCzWHjJhu7+2qambE\nAabdP9nH2NvqJHUJyPsxtDSrSWCBY4CoL3wYu36UrIA4NepyudMPNe9fhKTEU0bg\n8DLclw6hYdj5p9Zj3OUuwOZLz6r85KwnooTsUjOYkBXvdUuHWkgONqqZlPMApS4i\nChRQ7ysHAinPyyzsvr0PR9g6J52CSCO/7qwSJy6yqSzuSWrbZUa4FVTcKIwWJJPu\nJ2XzB4rWVG1wWjzMM6MIvFbO2HY9upzh651OdOwsYvk=","translations":{}},{"version":"0.6.2","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.2/nextant-0.6.2.tar.gz","created":"2016-11-01T11:24:58.054892Z","licenses":["agpl"],"lastModified":"2016-11-01T11:24:58.151609Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"h8KgwMh2RGGIp7q/II23VSfE5Ibkha7p/C1kvIfG6QIIc2Zu/Mm3Oekynnysh5ZJ\nZuMTaeWbejbBAmlnxW+AwBWa/s2PoMhv7foVvdtg76l9/qr+9jGvUM7D1LbbBvAy\n/XW6JSrhhBZHOohdU7kwV5Xnwsn/NC/zUe0G4eZ+9fc9uSntkob9wnWvUs2daAeD\nY6Mi7Xt/XAIX65OIVTKfC6ah1SlbXgtJ2i2j4G32I9jRhmbkpt/UJEangn90fHnY\nQXNJ85OyV0aNMafNHoMSL3uLscdvjp0Hy8w4iBeavsRlCs0GiUoG1+YdwTwmC9EM\n4CjbMfRJ0DYK7u697TOmS8MQzk8O7f5THtjeokZlrom2YnV9t6gLvjnxl/+gXPdJ\nmgLixnA8P6tPsff9pquHKQZsvxjv6vVa2DVJc8VpcqJRih7yj/3V7rxesEP7MUnP\nznIOcwzTsKXHuAnvujpCwyQj3QtpQK2XJPQ5WkKgwbTdvriVJfnzPironhcHo1vC\nbuUDOdhL59aySChw2cZGD9lCWaxYR7I1BDDzWKNl9Qg0AZ2auyGUGTv8P2vi5qUB\n0CmnkzkZurR5ju6Nb9/2lcZvda7QJdIdMtm2Wnn+Ak/Z3Y4IehB5PPDP5/MMAhQY\nXE8Jqe0mGtiU/O2346L5IThkS58JlRmep4kYv+II9zE=","translations":{}},{"version":"0.6.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.1/nextant-0.6.1.tar.gz","created":"2016-10-27T21:16:47.066097Z","licenses":["agpl"],"lastModified":"2016-10-27T21:16:47.125641Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"axSX4Kz2P4PbKU676DibjPZsxk8hCIG3lLOmeMXoiBhp3ka4wJ8u5tNwTzgY8/MV\n3mjXe5DNttD66SqmiRNSPKbotYHVFFW3wFK+Dgh/++n/KTomGYUeIwt88Z9ecbuG\nNT6U46jFrfZBYzRHWzbgiJ4c7MCoid9cfmoB7HDuQSyw+E0S2vbLL8+jzMcIzF+5\nTh/sJEterXCyrWSciw/9x98F+4svNbskdEIvrOox3+K6UIhpsojqJR2+bQhG3rsM\nPerOb6J+bzHdLV1ZL/4nWEz1F30T7B08QxY/4pHD68JFQcdtzmHMIhXfCoRvWhN2\nVRnizx3IXBALY4F49Ql6bjsnr6BCp+LroM5RSQ3eupDcqejDJLbjPz8xfOMOwlx7\nz84Xd0MUyqaEkxg1ihsWLbPlYACUZ2aoDkSQUIbfZTTiov7eqTM8UBc/UqVID/LU\nyEW4gjFZzQy6kX76XRAGq1vebKFjCU63asCnVyJhF/YQVTu1hPGbFslkRKnYuh8W\ne4MeaNfbdjcSEX+7oTcPJz6V09pOPvukXL0M1m7lS9PhTisI6oGj8c33GPYp/DSK\n6SGk+ukbt1mwFuFKdTvAMxo1lk96D+pKUv4MX/ralaaoIAmwPTGsSQ04RyL454ae\nU6q8PApwrVyPHYwMBPtXGoQMyb2ZV9rylazYbKCQ8I0=","translations":{}},{"version":"0.6.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/v0.6.0/nextant-0.6.0.tar.gz","created":"2016-10-26T01:46:48.419025Z","licenses":["agpl"],"lastModified":"2016-10-26T01:46:48.521063Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"W2TmbX/NbbfPPjIJLalO0kCDhhQF1pEohH/CxO9bY+yR+a5NKiTbpAhG2McqpTSj\nmgC4J8/thmwGlWGC+VW+KlpXzzjc7wCgMGMKViOpGD3pIy8p8U5MXTqVgjjrEb9g\nKgr9uErXzxJ5oDfkx8Uh1bUeBJTsAAivGJqMlhBYFGxw8BSB09sfOZytNxo4wbwZ\nNAcYP1qvkUQ8CVR0nInSTRfLvAp5+e/8xxyYZwJIWrdNgpoP0CxiwzKP/VSjBk/U\nsPU4R72UQnVZB0InRCeh/KNTwu1YiPkUKm+mNmt2hCfN7Fm6bY2rUMH7oa8KTkqn\nh52FhbaYRSAR1OPdC5RnHiQWlPh71gq+4Xqgp19Eawnl/QiVteVifSjNQZ+Ban8M\nRyw/PxHnzIWg/OAjx81Jx9mXjUIHSeUxMTJTKTp+lEqIAzjku0iHeU5UPGCfE+VM\nwmopZfnlfk2nLkUwjQXLCIcnZD1ME1m0h/H4Ad0Q/qXpBScUp47npkxg2b8zPIhk\n3aXUmNPLgwyXPWvAuaBK/WwpNefUnqWFns8t2Alpzg/EpC2PrZqciCNDcRFEycoa\nX+JsFyD7eYA7Dc9iIf09gXZX+tZ+Jinb+iPDwYrl1u/7IIBoBlUGCgo+cF7/dL9S\nc3vYeWw6MCH8Sv+ckgS2g726BfdN5EjB/8cb071b4lE=","translations":{}},{"version":"0.5.1","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/daita/nextant/releases/download/0.5.1/nextant-0.5.1.tar.gz","created":"2016-10-17T15:23:04.515057Z","licenses":["agpl"],"lastModified":"2016-10-17T15:23:04.576640Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"Pp3rC/9RmAYURneGpGit4HZ2t1qH9A9nwsUnGDgRuJ0akIii7CtJC+n8l1b9k73/\nhxMYnp2JOBu2HWKgFp9a3yeo1xphI5hOUdVQ1UZAWxIQyDI1FZVYDr81l7GCdkqm\n2lMxgviFADSYURCgEnAsj9Nt0NZ6LDcJZiJg3iPAjkDI0U+KnEBjtx/XRFqGUnfp\nCUZ/XLHh/hvoEitSHepTBDCMKkTNjbDEwBYfA2rAoz4zbMR5zKLU+1r1DIUgWSRe\nbk2i8TaTDVL4cbb6MhkGKwkujb+Atikvkpi45o7+fyQMs84c6fjjh/TZJaC+dMyG\n1GCikMPwwtEPjXtnLzynERAxJOd5mP4Ee4sD8ZrnzNUehpyFR88pwWU6r+dmiebb\nnsYlGkhIu2aIO2O4HZ4sUTsO5sfjZ9me7jsafhgJl6iG4IBeHa/L1MsSbhsh6mvH\nYsz4Xsluwr0QcFLmSDDQQYynyogKfJZG2xQsadM0GETWgXE44dVeRvMUsILfB4uZ\nmfKgd23SgaOhYC8m4bg5Hxnkl+xHJnyGZ6jhqg7bhuKwsoLymc18Vmjmb7a45HGV\nXbL5CTmw9yaPOBS3v7v91TnlB+0lhlzbKzZ0xIhY55qsTC76uScbTLwndPqNGaF7\n2koxRbJ3jcmf/Z2MLymdRi2BTZbZkPkxgVrSf9plaR0=","translations":{}},{"version":"0.5.0","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/daita/nextant/releases/download/0.5.0/nextant-0.5.0.tar.gz","created":"2016-10-11T11:47:46.191539Z","licenses":["agpl"],"lastModified":"2016-10-11T11:55:40.393000Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"qzQJSLK8nkrQedwwxUdhxL8bq3aXyppAlWJo+n3GqSvqA8uNTzl3Wsci0LsnBV0E\nDvDNW8K0enhl563F/bywQrDhgKl8jTX/CA5KCxqO9P+tvE80zAfMqiRnQayVcWuY\nSWX6RqfI/kqiWyN1SsFp2EDlas6eb+xfIoiJamlfsN0qzHYOFt5W77wmw2Bn9dB5\n9nwHHyC0z60Pf2pPduc/KuZ/971WrDFaIapL7Gm+z9XoaKSwUT575VtS+RNJkOKy\niBrwnHdc8x/62HPFOXsUYjCt2aEmLzPCQN8Ke5pd3596hm5wbAVzTHuxf2H35tb3\nljfGqAZ5AJX2Xd13d4aHXFdSEILwv6IFq2fx0hO3vkvFEoKF5oQ2t3hi++Mw/h8R\n15OKZCOC1bFH3gTwdshmnHSTSr3LxDeTF60aH16wpXcehQuJHagpb/aG8mPD1w+v\n759/mekqa4LYlqT9TLWTqX3UPeQXYIwcPijG84IvW1BDK1M4Mj2Vqsld4jXwG6CP\nORIL8xoQbA52dQI1Y19JXcU9zxIb6GaHYgpV0wejatsZRfhPv2Yd0CBShF4HY7aw\nnfcm88pqzOKNvjnLZjTFQwuJ0AUUSOsWhgZzYt8tATJ2KDZ+lxz+WAMGXJAC/ciY\ntrrglY7YxwJNLbYp+arE0sowZx+IOVaSZBvmUGHiEBY=","translations":{}},{"version":"0.4.2","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/daita/nextant/releases/download/0.4.2/nextant-0.4.2.tar.gz","created":"2016-10-06T10:31:12.482416Z","licenses":["agpl"],"lastModified":"2016-10-06T10:31:12.551117Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"QHJhYcBMi5HyPofshZ7EdcXsOfRrl7o48Y3BBBq8CkmYtFDbekghdJqjFbwwZa5u\n8FtgMVwssql/RSDNP6M2Zc/MpQ3K9gDm+DyxE5KRmtMEpzHB+oD+1DxP7kAoyW8/\nnBr5iiQSdLCelddMcTwbdxskLFUXIs3cFuLGhMvr8pdQOAgfxte5lolrj4/8EsJ0\n0yUImgIYG4NlgmvCygGApdpVaOcK7XVtv4oH+x43JmX9YZ3Ce0DQPYPUbFTCf4ZS\nS075j1vcnPx2cRFGxc+YpKzYVVYoy7ZdB75Hq+kaei/atxrTyV5+gcCrVPnH1RkX\n6G8rgu5l8FoGJYopi8/9dd8LsGLFx53CHMdEVob3tFR0WeK4TJAGJa403zE6S3hM\nxr86WCedmjuti0uOhSQr5AEVAoXZ/JUWQMMsPAUMuKEYVjKfmve6TlcNMC2oM5XT\nXcOf4OP3pcQq4ViN53o4Pj6NGSci6IzD6xLeAxKZUoTX37ArVKH6RHS5Najc193H\nRhYRnfE7D5YOr1u10HaZCFCVJif2MgMP0/uH2759NoRjXFowrh7Z6dW7JQG5lbHN\ne0jjJH1Y8m8H1peGGcmM0YxFiOVZ0ER7P+AxT4Cbau/cVhaS8vnPF2a2a6YFRiFS\nVH4aqazvvXrtifDr3lfvlyPCrP/570nwvOJgZGk+K/Y=","translations":{}},{"version":"0.10.0-alpha","phpExtensions":[],"databases":[],"shellCommands":[],"phpVersionSpec":"*","platformVersionSpec":">=9.0.0 <12.0.0","minIntSize":32,"download":"https://github.com/nextcloud/nextant/releases/download/0.10.0/nextant-master-0.10.0.tar.gz","created":"2016-11-22T16:02:57.740378Z","licenses":["agpl"],"lastModified":"2016-11-22T16:02:57.900805Z","isNightly":false,"rawPhpVersionSpec":"*","rawPlatformVersionSpec":">=9 <=11","signature":"kDO3xbPpoUdl2qo362tXfJIqKeiKE12M8FkMXbdKiRNzuQyvDOehQq3dErALZDOr\nLG47Tpez/Kn9Fsx1y4dQDx0w9SD3pyoqvjj1O6KkTYN6srpitQcj9EzEItCY+MZd\ngRSc7Px9MzxpFpgwtuThGVlSt5kLMd0vjWFLVcv7k07rZfWEsTwXd24INIDtlr1A\nC7hyLB777nEOGa7oAzx8nr+FJcIbmu9opVZk8AL40FOFDNBgfAy2AS9hGZreUmRV\ndV9Zh7UAR+RsEeO51xcU/CKqC8Jb0jL1gkYyUaQy16oe1HF9bRs1PWuNL5mYwsmy\nZNn0ay/a7mb7hxJbza1F3lbgBtodvbgUm7+So/QvaR29CSAqqoUXeQy6FfSBVWhZ\nYlTxdQfKcBcUPFO14BBk/O5p5iQaG8JCLJ/EZGDPDIVDMn7crGQ4oLZJv80eqTeB\n7ueDmWaD3gQ9j2XKsMk1uLSyY4unt9AaTofBylsKD1SjLhyxofGZym4jc2+M1GnQ\nyLcoEMSexnKuextu4nzrA0y5k3z9tvO07R29lwT1GFp6oGAakMLob/6XrGsm3YQY\nRQXgfXKFw8XmXBumqG8ayEIyvQ/O8nO6r4R1H8a7ooj6oWa3PhPsen+gLE0SpJPZ\nz3e2TLliwC4VtZp69H7u3px5Qn1Fc6RMDTh571edCr8=","translations":{}}],"screenshots":[{"url":"https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/displayResult.jpg"},{"url":"https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/admin.jpg"}],"translations":{"en":{"name":"Nextant","summary":"Navigate through your cloud using Solr","description":"\n\t Navigate through your cloud using Solr\n\n\n**Nextant** performs fast and concise _Full-Text Search_ within:\n\n- your own files,\n- shared files,\n- external storage,\n- bookmarks\n\n\n### Recognized file format:\n- plain text,\n- rtf,\n- pdf,\n- html,\n- openoffice,\n- microsoft office,\n- image JPEG and TIFF (will requiert Tesseract installed)\n- pdf with no text layer (will also requiert Tesseract) _[work in progress]_\n\n\n\n## Installation\n\n- [You first need to install a Solr servlet](https://github.com/nextcloud/nextant/wiki)\n- Download the .zip from the appstore, unzip and place this app in **nextcloud/apps/** (or clone the github and build the app yourself)\n- Enable the app in the app list,\n- Edit the settings in the administration page.\n- Extract the current files from your cloud using the **./occ nextant:index** commands\n- Have a look to this [explanation on how Nextant works](https://github.com/nextcloud/nextant/wiki/Extracting,-Live-Update)\n- _(Optional)_ [Installing Tesseract](https://github.com/tesseract-ocr/tesseract/wiki) ([Optical Character Recognition](https://en.wikipedia.org/wiki/Optical_character_recognition) (OCR) Engine) will allow Nextant to extract text from images and pdfs without text layer.\n\n\n\t"}},"isFeatured":false,"authors":[{"name":"Maxence Lange","mail":"","homepage":""}],"ratingRecent":0.5,"ratingOverall":0.5,"ratingNumRecent":0,"ratingNumOverall":0,"certificate":"-----BEGIN CERTIFICATE-----\nMIIEAjCCAuoCAhAFMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD\nVQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI\nMTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB\ndXRob3JpdHkwHhcNMTYwOTE0MTI1NDQwWhcNMjYxMjIxMTI1NDQwWjASMRAwDgYD\nVQQDDAduZXh0YW50MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsbnQ\n+9acjKHfcrUj4yqBpD++GmQ5z2Sp8C8uOz4ZbLyM9bUXEYHo4a4u3CdC49kGUkb3\np5MkEAEzslTWDi1eh5MZgPWpbPgItsDsXY1o55O3jtxNkzSG5/yYcPQcuKtIOm9S\n7DY0K+UQt3nK+RrXEZfARMNrzFbEzpE3b7w901Yl5n+m/B8rhW4pqg8uSfx3u04J\nwduV1fHwoHUB0Ox5HyWib4Pq1XppNh7xdc2Fg93JxshwuCPJyOOzrFTnxC7s1yzQ\nUvaqkjPW5QeQRunQjZ2XtpYH8f8v01W18bNEiHwqtFwuDEyCVx1rvEMgUDVXdPkP\ngZrlB5TzGmz0U3HzYvf6205WuzfHxz7kPj502wP51PoZBKpniggKzmuXkx6BpsZC\nZX45VpDHdiATLwRj1t2bMs3C01nzpIWO5ZwFtkepH3Y+mvwX5lDh/XDsqJC2Yo8o\nWMmniWNW7dspufYOsBUqqYGP7rkailgVT4oYk6D1j6oFZ5SSpfPF5lsyYedDSM6y\nbIGVkSF+sjLK6R9BenBijKceAKsS//WwRYCBPC+JHlsYpXKW12bL+C47Kj2/N6d4\nrYryzV6ofVSF6pwIq0oEjoyfBfNpYavf3xrRkSSmIIlPSnMY7DT1xkGD5retxSm6\n+WIfkWKRZpv2S6PhMHGLspYc4H5Dj8c48rG5Co8CAwEAATANBgkqhkiG9w0BAQsF\nAAOCAQEAOZUwyPaUi+1BOUgQJMWqYRoTVZUyBshTXSC7jSwa97b7qADV9ooA6TYF\nzgsPcE41k7jRkUbnjcY45RGtL3vqsgZbx5TjPa5fGMxlqJ6eYBOY61Q6VIHEVm3u\nxnPEO9dsMoDBijvo5D7KtE+Ccs907Rq70kCsbrdgPHkyb5tDSnCKogN1LiQrg1EP\nmy7Z1C7jG9/h57vx0+QBMDCYnTmqLsvMKqo27uHskzAiB7VXLEdSZ2FtMGHkLUQO\n0bfhnvTZ2VhMmK83t7ovo71An4ycmsolGD/MA0vNI78VrVISrdI8rRh2WntUnCBU\nEJL3BaQAQaASSsvFrcozYxrQG4VzEg==\n-----END CERTIFICATE-----"}] EOD; public static $expectedResponse = [ - 'data' => - [ - 0 => - [ + 'data' + => [ + 0 + => [ 'id' => 'direct_menu', - 'categories' => - [ + 'categories' + => [ 0 => 'customization', ], 'userDocs' => '', @@ -61,27 +62,27 @@ EOD; 'website' => '', 'created' => '2016-10-01T09:16:06.030994Z', 'lastModified' => '2016-10-06T14:01:05.584192Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.9.2', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/juliushaertl/direct_menu/releases/download/v0.9.2/direct_menu.tar.gz', 'created' => '2016-10-06T14:01:05.578297Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-10-06T14:01:05.643813Z', @@ -99,32 +100,32 @@ u2SqRhwybS8j4YvfjAL9RPdRfPLwf6X2gx/Y6QFrKHH0QMI/9J/ZFyoUQcqKbsHV bkR1DTBCyDjdpNBidpa3/26675dz5IT5Zedp4BBBREQzX08cIhJx5mgqDdX3CU09 uWtzoaLi71/1BWTFAN+Y9VyfZ8/Z3Pg3vKedRJ565mztIj0geL3riEsC5YnPS0+C +a3B9sDiiOa101EORzX3lrPqL7reEPdCxrIwN+hKFBQ=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://bitgrid.net/~jus/direct_menu_nc.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Direct Menu', 'summary' => 'Provide easy access to all apps in the header.', 'description' => 'Provide easy access to all apps in the header.', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Julius Härtl', 'mail' => '', 'homepage' => '', @@ -159,11 +160,11 @@ G2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M+Ug81AqiY7XjdiaCPdh0Tthcx 2OmWZo7UBREWenjKyFZZ/iKoqH5sdenBtpo= -----END CERTIFICATE-----', ], - 1 => - [ + 1 + => [ 'id' => 'apporder', - 'categories' => - [ + 'categories' + => [ 0 => 'customization', ], 'userDocs' => '', @@ -173,27 +174,27 @@ G2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M+Ug81AqiY7XjdiaCPdh0Tthcx 'website' => '', 'created' => '2016-10-01T09:16:47.111889Z', 'lastModified' => '2016-10-12T19:50:16.038821Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.3.3', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/juliushaertl/apporder/releases/download/0.3.3/apporder.tar.gz', 'created' => '2016-10-12T19:14:10.802359Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-10-12T19:50:16.104357Z', @@ -201,22 +202,22 @@ G2dF9Gtu4GiQ5fuaJknaxlgXHovfqeZwZJX9o4M+Ug81AqiY7XjdiaCPdh0Tthcx 'rawPhpVersionSpec' => '*', 'rawPlatformVersionSpec' => '>=9 <=11', 'signature' => 'nhlT9lhrmBxIsqh/e3RLm2NDw/U8ZvvoMyYQTLMM3H19DQmVcPYPYC9QWVTsowUzXblVaOXVGylbpKma9yOlOAqJtF3qyXecLl4+tA/Awb6BBhKPgHFdcLDAL5yy1K7/uei3SgEojMlJoI9vEK5I1C5YTh43yNH+//Im6MAuNYFUTlMXK426zdOe6ogpCI5GlYdXopqYANxcpT+WXWET6DDSM5Ev+MYwMcSAY4r8+tvARRU4ZAenRgjkBT6R5z6cD76emRax14tbV6vkjjwRcO+dQtM0tFPbd+5fsNInbauv50VzIMgjA6RnKTOI17gRsSdGlsV4vZn2aIxEPWauu6T/UohMvAE9HMn13vtbpPBSFwJAktj6yHASYGzupNQLprA0+OdyALoLZPpQAKNEXA42a4EVISBKu0EmduHJlUPeqhnIGkkGgVNWS8AWqzP2nFoPdXBgUWateiMcBTHxgEKDac5YmNc9lsXpzf1OxBaXHBhGYKuXPwIfyH3jTWb1OdwixJEuRe9dl63T9qOTRre8QWns/bMqKLibGfMtFhVB21ARJayBuX70eVvabG/2N7Y5t1zUlFygIKu51tvo3AVCRDdRrFWDvkAjxzIz5FIdALVZ+DReFYu/r4WF/w3V9rInFuEDSwb/OH4r8sQycs07tSlMyA74Y3FpjKTBxso=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://bitgrid.net/~jus/apporder-nc.gif', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'AppOrder', 'summary' => 'Sort apps in the menu with drag and drop', 'description' => ' @@ -242,10 +243,10 @@ first app of the user order. ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Julius Härtl', 'mail' => 'jus@bitgrid.net', 'homepage' => '', @@ -280,11 +281,11 @@ Tu+WGOL2Ee5U4k4XFdzeSLODWby08iU+Gx3bXTR6WIvXCYeIVsCPKK/luvfGkiSR CpW1GUIA1cyulT4uyHf9g6BMdYVOsFQ= -----END CERTIFICATE-----', ], - 2 => - [ + 2 + => [ 'id' => 'twofactor_totp', - 'categories' => - [ + 'categories' + => [ 0 => 'tools', ], 'userDocs' => '', @@ -294,27 +295,27 @@ CpW1GUIA1cyulT4uyHf9g6BMdYVOsFQ= 'website' => '', 'created' => '2016-10-08T14:13:54.356716Z', 'lastModified' => '2016-10-12T14:38:56.186269Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.4.1', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '>=5.4.0 <7.1.0', 'platformVersionSpec' => '>=10.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/ChristophWurst/twofactor_totp/releases/download/0.4.1/twofactor_totp.tar.gz', 'created' => '2016-10-12T14:38:56.174612Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-10-12T14:38:56.248223Z', @@ -332,28 +333,28 @@ h7ro5ls+d3OQ8i3i4vdZm821Ytxdu/DQBHiVoOBarvFWwWAv2zd2VAvpTmk6J5yv 3y+csRqpEJYd9fcVMPsTu7WBRRrpBsAqdAHJcZEwak2kz1kdOgSf8FIzP1z6Q71d Ml2RKcPeutMHHSLiGIN/h7fM5aSs49wGgGZmfz28fHVd7/U0HFSMYmkT/GMq5tMP Iyc+QZAN4qbX8G0k/QSTkK/L4lOT2hQiQqiSqmWItMk=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ + 'screenshots' + => [ ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Two Factor TOTP Provider', 'summary' => 'A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)', 'description' => 'A Two-Factor-Auth Provider for TOTP (e.g. Google Authenticator)', ], ], 'isFeatured' => true, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Christoph Wurst', 'mail' => '', 'homepage' => '', @@ -388,11 +389,11 @@ VMgQ6yUWNuzOQMZpMIV7RMOUZHvxiX/ZWUFzXNYX0GYub6p4O2uh3LJE+xXyDf77 RBO7PLY3m4TXCeKesxZlkoGke+lnq7B8tkADdPI= -----END CERTIFICATE-----', ], - 3 => - [ + 3 + => [ 'id' => 'contacts', - 'categories' => - [ + 'categories' + => [ 0 => 'office', 1 => 'organization', 2 => 'social', @@ -404,27 +405,27 @@ RBO7PLY3m4TXCeKesxZlkoGke+lnq7B8tkADdPI= 'website' => 'https://github.com/nextcloud/contacts#readme', 'created' => '2016-10-30T14:00:58.922766Z', 'lastModified' => '2016-11-22T22:08:01.904319Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '1.5.0', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/nextcloud/contacts/releases/download/v1.5.0/contacts.tar.gz', 'created' => '2016-11-22T22:08:01.861942Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-22T22:08:02.306939Z', @@ -442,44 +443,44 @@ Me1EZcde8SLEpTbCWYIfIw/O9Fkp5cWD/dAqoiO6g+gNxSZ/gGp57qoGfFxn7d/x H3aH8GljatAFjrwItw1JzR0THt0ukkOK+bw/pfCslk10sjHMitmz/GXa4qMS91DZ BKLUd0dSfQUQzkfwcojImbzJRvca4/DYe3mfG7+RCH0tDL6t72dKL9joB++u5R1u VZPgkToexlXcKWpiDB8H2/SEShKr4udAOjR5de9CYWM=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/screenshots/master/apps/Contacts/contacts.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Contacts', 'summary' => 'The new and improved app for your Contacts.', 'description' => 'The new and improved app for your Contacts.', ], ], 'isFeatured' => true, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Alexander Weidinger', 'mail' => '', 'homepage' => '', ], - 1 => - [ + 1 + => [ 'name' => 'Jan-Christoph Borchardt', 'mail' => '', 'homepage' => '', ], - 2 => - [ + 2 + => [ 'name' => 'Hendrik Leppelsack', 'mail' => '', 'homepage' => '', @@ -514,11 +515,11 @@ Gld7yCP47xNPaAZEC66odcClvNtJ2Clgp8739jD6uJJCqcKDejeef0VU1PG7AXId 52bVrGMxJwOuL1393vKxGH0PHDzcB1M= -----END CERTIFICATE-----', ], - 4 => - [ + 4 + => [ 'id' => 'mail', - 'categories' => - [ + 'categories' + => [ 0 => 'tools', ], 'userDocs' => '', @@ -528,27 +529,27 @@ Gld7yCP47xNPaAZEC66odcClvNtJ2Clgp8739jD6uJJCqcKDejeef0VU1PG7AXId 'website' => '', 'created' => '2016-10-19T19:41:41.710285Z', 'lastModified' => '2016-10-19T19:57:33.689238Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.6.0', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '>=5.4.0 <7.1.0', 'platformVersionSpec' => '>=10.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/nextcloud/mail/releases/download/v0.6.0/mail.tar.gz', 'created' => '2016-10-19T19:57:33.676730Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-10-19T19:57:33.834580Z', @@ -566,10 +567,10 @@ sP8OrkQFooL4E7S4BWfdSiN/a8jUITJQkuXp/OVrVGeCupLWJh7qegUw6DvoqyGy D4c6b+qYn68kx3CLaPPiz+tFAZQZQdj7+Kx/lohso8yTnVSiGYrMj4IvvCbpsQjg WF3WSqF/K/tTnPYTWb9NUPSihTbVNv6AXOfTsPEp/ba2YSS5DjvjVjkr5vhR9eg1 ikQ3Cw6lW3vaA4LVCC+hFkMRnI4N0bo5qQavP3PnZPc=', - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'changelog' => '### Added - Alias support [#1523](https://github.com/owncloud/mail/pull/1523) @tahaalibra @@ -607,23 +608,23 @@ ikQ3Cw6lW3vaA4LVCC+hFkMRnI4N0bo5qQavP3PnZPc=', ], ], ], - 'screenshots' => - [ + 'screenshots' + => [ ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Mail', 'summary' => 'Easy to use email client which connects to your mail server via IMAP and SMTP.', 'description' => 'Easy to use email client which connects to your mail server via IMAP and SMTP.', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Christoph Wurst, Thomas Müller, Jan-Christoph Borchardt, Steffen Lindner & many more …', 'mail' => '', 'homepage' => '', @@ -658,11 +659,11 @@ xRS4JXbapjolkxyGSpP+iYSgItVnYzl6o9KZResR4yDsBv7G/8fpV4GQU9IS3zLD PiZOosVHWJdpUKCw9V4P1prGTQ== -----END CERTIFICATE-----', ], - 5 => - [ + 5 + => [ 'id' => 'audioplayer', - 'categories' => - [ + 'categories' + => [ 0 => 'multimedia', ], 'userDocs' => 'https://github.com/rello/audioplayer/wiki#user-documentation', @@ -672,27 +673,27 @@ PiZOosVHWJdpUKCw9V4P1prGTQ== 'website' => 'https://github.com/rello/audioplayer', 'created' => '2016-09-16T05:44:24.857567Z', 'lastModified' => '2016-11-17T22:34:34.637028Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '1.3.1', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '>=5.4.0', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/Rello/audioplayer/releases/download/1.3.1/audioplayer-1.3.1.tar.gz', 'created' => '2016-11-17T22:34:34.215350Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-17T22:34:34.867778Z', @@ -700,10 +701,10 @@ PiZOosVHWJdpUKCw9V4P1prGTQ== 'rawPhpVersionSpec' => '>=5.4', 'rawPlatformVersionSpec' => '>=9 <=11', 'signature' => 'p6Zz0IEFrxvw6y/3jHgGWWCxR6qpMzvU2HKfxcIVsK6sJnoRUhWLeAXwZ432fH2a S2llj+IGS9OvW+5VQElrXgPtEjDK1BT00DRJnp5RFCRlUv0LNoedJMzx6B6AHqPP JBufk3cG1O/CO0M0L1ITGSmSOzfKvWTRo3lxVGF792NyBaP/SyZCkH1N1TzBQzUi Ywl3+HiglPcXbHjtJm/arnKorbJWVKoaN93xFuaBapd2ozQSpi0fE0uGRsici+U7 HNa1M5WFE1rzUJoufE0E9246At07rFY1e+TdNEq8IlLgCXg5vGCKkEyuWpWno6aX LfRaIiT9x39UTAwNvuDKS0c+n4uWDYPsGfKhDx9N7CXpUrthfXVEWRzZEXG7as10 6ANvrRPJemSZH8FUSrdJhD7k12qa9R825y7mIG68Li8P71V92EOxFfo9tNXqXwBt VuDGxBqByFVPqSCj5I8hrzJzQl2Xt40g8+8ZcSF96RMg/pM+bwRMTv+mz0V+vQQ4 DWjqnWVPalaJ1PPD5/QFFErtXuNRbyxKZ6BMWxfJlLM9Kz66P75K+8fYaSwz+2KG NxY7I3svzS2K9LGH3fBLUy1t3Hl+c3zGFq/ll1MJrf9NswV4yxt2WmISfM/KDww8 yELkGs2cRzbw2tCvnmYlJJhIqRLkyFAbDzWRH/XdVx4=', - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'changelog' => '2016-11-17 - fix: one-click-play for wav not working - fix: wrong sql statement for PostgreSQL [#90](https://github.com/rello/audioplayer/issues/90)', @@ -711,35 +712,35 @@ PiZOosVHWJdpUKCw9V4P1prGTQ== ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_main.png', ], - 1 => - [ + 1 + => [ 'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_lists.png', ], - 2 => - [ + 2 + => [ 'url' => 'https://github.com/rello/screenshots/raw/master/audioplayer_share.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Audio Player', 'summary' => 'Audio Player for ownCloud and Nextcloud', 'description' => 'Audio Player for MP3, MP4, Ogg, and Wave with a lot of flexibility for all your needs.', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Marcel Scherello', 'mail' => '', 'homepage' => '', @@ -774,11 +775,11 @@ FNvGFVBn4r5qCiChEoq+rCXHRjPi/eCfbW21XeLFDiLxapcZyc85JIcA7znUYoFe P7Y/ekMscwWhLbF91OaQlcWpRtEMyde/DaI= -----END CERTIFICATE-----', ], - 6 => - [ + 6 + => [ 'id' => 'calendar', - 'categories' => - [ + 'categories' + => [ 0 => 'organization', ], 'userDocs' => 'https://docs.nextcloud.com/server/10/user_manual/pim/calendar.html', @@ -788,27 +789,27 @@ P7Y/ekMscwWhLbF91OaQlcWpRtEMyde/DaI= 'website' => 'https://github.com/nextcloud/calendar/', 'created' => '2016-10-01T12:40:39.060903Z', 'lastModified' => '2016-11-22T20:31:13.029921Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '1.4.1', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/nextcloud/calendar/releases/download/v1.4.1/calendar.tar.gz', 'created' => '2016-11-22T20:31:13.020268Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-22T20:31:13.087340Z', @@ -826,34 +827,34 @@ hh1FBfA5pvCJbkJ6nr5bU4bKaffwDX1nr5h77FS5zzn0Pyd7ZIExmVmNtaeJfnfV eFLKrUg3EvnTjvknbBxMB55h9jNJr0SAlkrmyEVm6+CE3BwRWpKB+cJMBuGiwPwv r/ASRiJrkDThbNWAUtX70rUmCqDV6/MujLXViqOc/Q2OHvcXd1oGDccJSQT92/1z 7nonnedyYQIDqUt7u68WL8JRxp7pFsEqKLVuWSgxW3c=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/1.png', ], - 1 => - [ + 1 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/2.png', ], - 2 => - [ + 2 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/3.png', ], - 3 => - [ + 3 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/calendar/master/screenshots/4.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Calendar', 'summary' => 'Calendar GUI for Nextcloud\'s CalDAV server', 'description' => 'The Nextcloud calendar app is a user interface for Nextcloud\'s CalDAV server. @@ -862,22 +863,22 @@ It integrates with other apps, allows you to manage calendars and events, displa ], ], 'isFeatured' => true, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Georg Ehrke', 'mail' => '', 'homepage' => 'https://georg.coffee', ], - 1 => - [ + 1 + => [ 'name' => 'Raghu Nayyar', 'mail' => '', 'homepage' => 'http://raghunayyar.com', ], - 2 => - [ + 2 + => [ 'name' => 'Thomas Citharel', 'mail' => '', 'homepage' => 'https://tcit.fr', @@ -912,11 +913,11 @@ Q0Bl/QinETk72afGR46Qvc7tC1t9JjQQD3AUbEGuJdGvXjJJ9GREYu01XoODmPdT jXXOI8XIOK6kxXhPHUc3iWu9b4KqGm0= -----END CERTIFICATE-----', ], - 8 => - [ + 8 + => [ 'id' => 'ownpad', - 'categories' => - [ + 'categories' + => [ 0 => 'tools', ], 'userDocs' => 'https://github.com/otetard/ownpad/blob/master/README.md#mimetype-detection', @@ -926,27 +927,27 @@ jXXOI8XIOK6kxXhPHUc3iWu9b4KqGm0= 'website' => '', 'created' => '2016-09-29T15:58:52.814912Z', 'lastModified' => '2016-11-19T17:37:52.278497Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.5.6', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/otetard/ownpad/releases/download/v0.5.6/ownpad.tar.gz', 'created' => '2016-11-19T17:37:52.234684Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-19T17:37:52.423930Z', @@ -964,18 +965,18 @@ qEC5WBgJucsFxSvkHh52v43M8jgPYBfHWEL/M/+377z3+mbuIh+BcQ+vcDdiqxTF o3n0+gw3QYIhLEe75sUhxG6ynVUdW25AKKju1kVj3KJnZTBH1R8t8/zy4DnJG8d4 uRGqyU4BXpZjEC3nVlsC7vCncWWhxl0WZQ/MWKqsfjVAU4I88E518D6NioqMnPEJ iCZ2x+69UCDEQyfCSKajgAYT17r3OhZei8F9KSCH8Vw=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ + 'screenshots' + => [ ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Ownpad', 'summary' => ' Create and open Etherpad and Ethercalc documents. @@ -990,10 +991,10 @@ iCZ2x+69UCDEQyfCSKajgAYT17r3OhZei8F9KSCH8Vw=', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Olivier Tétard', 'mail' => 'olivier.tetard@miskin.fr', 'homepage' => '', @@ -1028,11 +1029,11 @@ EUa2uYht/z475k4+vf0YhV98iQH07GnmlfD2TDZgmOCQGKlNfJh1v88OZyLLa3dz gRHzGwKbAiJ8T8bbpZ3e2ozXxADr -----END CERTIFICATE-----', ], - 9 => - [ + 9 + => [ 'id' => 'announcementcenter', - 'categories' => - [ + 'categories' + => [ 0 => 'organization', ], 'userDocs' => '', @@ -1042,27 +1043,27 @@ gRHzGwKbAiJ8T8bbpZ3e2ozXxADr 'website' => 'https://github.com/nextcloud/announcementcenter', 'created' => '2016-09-14T10:38:53.939634Z', 'lastModified' => '2016-11-24T11:21:50.324839Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '2.0.0', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=10.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/nextcloud/announcementcenter/releases/download/v2.0.0/announcementcenter-2.0.0.tar.gz', 'created' => '2016-10-06T12:41:56.195206Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-10-06T12:41:56.263124Z', @@ -1075,32 +1076,32 @@ iWUb/Uv/ODj74wVDWqWxAFKaAG/FestCB3InOOZQqQZLzlAV0U9ziYDGNzBjFqof 9rLNxJ2IOqZOA7hhMIKhSrpA0KkSfNhBsVf8CWClYnVkZQiq0LoYkHkHIlXmXUr3 OfQFKEjtsx+bNLa6CkAaocHGHJXAofX3GQZ9cjBsjZqiTfbXfcVk0kRfz7pwL92L I1McfJYvgMxDQG5bjRpNJw==', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://github.com/nextcloud/announcementcenter/raw/stable10/docs/AnnouncementCenterFrontpage.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Announcement Center', 'summary' => 'An announcement center for Nextcloud', 'description' => 'An announcement center for Nextcloud', ], ], 'isFeatured' => true, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Joas Schilling', 'mail' => '', 'homepage' => '', @@ -1130,11 +1131,11 @@ JJoU8LQoHwGRtp3wutk0GlFzpEQEvSsn/Lsvvot5IfIe46tnzA6MVj5s64s5G8+Q phhXFlzXqO/VxquPdbfYjvU= -----END CERTIFICATE-----', ], - 11 => - [ + 11 + => [ 'id' => 'rainloop', - 'categories' => - [ + 'categories' + => [ 0 => 'social', 1 => 'tools', ], @@ -1145,27 +1146,27 @@ phhXFlzXqO/VxquPdbfYjvU= 'website' => 'http://www.rainloop.net/', 'created' => '2016-10-20T04:17:37.217555Z', 'lastModified' => '2016-11-18T11:36:04.309739Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '4.26.0', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '>=5.4.0', 'platformVersionSpec' => '>=10.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/pierre-alain-b/rainloop-nextcloud/releases/download/v4.26.0/rainloop-4.26.0.tar.gz', 'created' => '2016-10-20T04:28:21.491747Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-18T11:36:04.619927Z', @@ -1183,32 +1184,32 @@ hgFhPrg+7rf7g6UmJFOCp0dC9sBdyQ3KtJkv7bGqPr854r2cdA7xW0QHWQ2in9qQ LhIczc32ECi3ZVVgyF8zyT4Y/3MRS05oX3FHvHyt88mjni6bVaO78F7ZRSha8gHh NOAkku7AMXPvUCHaZP2iVCCoAViEso8GeR3O8xh2G42Ai61RLYwx8LB1+23EoJTr mfFuRYNSg+qAKCokXNnh+lDlwu4AkaQo3vtKGPXvU7A=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/pierre-alain-b/rainloop-nextcloud/master/screenshots/2016.10.20-screenshot.jpg', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'RainLoop', 'summary' => 'RainLoop Webmail', 'description' => 'Simple, modern and fast web-based email client.', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'RainLoop Team', 'mail' => '', 'homepage' => '', @@ -1243,11 +1244,11 @@ iLYeXQTV0XSRs8xVt+iyGlj7nPkv2DR0oCqRpWUFWeSBI//niDG5WxS3qg8kacSW fDSYhSN+IjrnIkwNtc8V9t7/GeQB5FE= -----END CERTIFICATE-----', ], - 12 => - [ + 12 + => [ 'id' => 'richdocuments', - 'categories' => - [ + 'categories' + => [ 0 => 'integration', 1 => 'office', ], @@ -1258,27 +1259,27 @@ fDSYhSN+IjrnIkwNtc8V9t7/GeQB5FE= 'website' => '', 'created' => '2016-10-31T08:55:45.631429Z', 'lastModified' => '2016-11-24T12:13:53.905352Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '1.1.14', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/owncloud/richdocuments/releases/download/1.1.14/richdocuments.tar.gz', 'created' => '2016-11-24T12:10:13.337165Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-24T12:13:53.963638Z', @@ -1291,44 +1292,44 @@ vKu5eNcOkf+WFyFKYi51TbsfWn2+1Wge3WWujKAVcEvqtcOOz+uMWNtqzBptEupk E1aaRnQfTx488YB8Ubul06LIY0PNCHgGCWPgy817tOVT7JA+V0P0FFonl/PXE0dr WgtxRJmvGaNiFzYq+kQmdKMfayZTm3kdVgP0W52t5wp878K0i4s2KPg5lANvjTz7 DCT+VV2IGIE52o4RpMUGyQ==', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-document.png', ], - 1 => - [ + 1 + => [ 'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-app.png', ], - 2 => - [ + 2 + => [ 'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-presentation.png', ], - 3 => - [ + 3 + => [ 'url' => 'https://nextcloud.com/wp-content/themes/next/assets/img/features/collabora-spreadsheet.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Collabora Online', 'summary' => 'Edit office documents directly in your browser.', 'description' => 'Collabora Online allows you to to work with all kinds of office documents directly in your browser. This application requires Collabora Cloudsuite to be installed on one of your servers, please read the documentation to learn more about that.', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Collabora Productivity based on work of Frank Karlitschek, Victor Dubiniuk', 'mail' => '', 'homepage' => '', @@ -1358,11 +1359,11 @@ myBOrjhrJgLIwvgH26MYZhdiSkFzoE38nMPZdrUmUDxcPCwucWJqgzDPudguFthj WCVZ3TTG/2z3+tWM -----END CERTIFICATE-----', ], - 13 => - [ + 13 + => [ 'id' => 'ocr', - 'categories' => - [ + 'categories' + => [ 0 => 'files', 1 => 'tools', ], @@ -1373,37 +1374,37 @@ WCVZ3TTG/2z3+tWM 'website' => 'https://janis91.github.io/ocr/', 'created' => '2016-09-19T12:07:49.220376Z', 'lastModified' => '2016-11-21T11:22:21.024501Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '1.0.0', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ - 0 => - [ + 'databases' + => [ + 0 + => [ 'id' => 'pgsql', 'versionSpec' => '*', 'rawVersionSpec' => '*', ], - 1 => - [ + 1 + => [ 'id' => 'mysql', 'versionSpec' => '*', 'rawVersionSpec' => '*', ], - 2 => - [ + 2 + => [ 'id' => 'sqlite', 'versionSpec' => '*', 'rawVersionSpec' => '*', ], ], - 'shellCommands' => - [ + 'shellCommands' + => [ 0 => 'ocrmypdf', 1 => 'tesseract', ], @@ -1412,8 +1413,8 @@ WCVZ3TTG/2z3+tWM 'minIntSize' => 32, 'download' => 'https://github.com/janis91/ocr/releases/download/v1.0.0/ocr.tar.gz', 'created' => '2016-10-24T06:50:43.283900Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-21T11:22:21.269108Z', @@ -1431,30 +1432,30 @@ GsrecNftUEhP/ngxA6lMBVkLmmdpiexVisvsavPi64i34OUA6qOuxjgNVBDwg56i D3tJOF7spnK6I3BhVLviou/zs30AIRVBDTU0Orzx78cbInwy6/vyJib2a1olAaHz v05SzlQRnBWM4jYBe0mA/2ds9AO6VrXGrT/iLlHemj6JYoGBM185TGewA7OJyX3a HSlSDqaremmi+aS3onx3AKhXykDxTRkMVarePwTzzFs=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc1.png', ], - 1 => - [ + 1 + => [ 'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc2.png', ], - 2 => - [ + 2 + => [ 'url' => 'https://raw.githubusercontent.com/janis91/ocr/master/screenshots/sc3.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'OCR', 'summary' => 'Character recoginition for your images and pdf files.', 'description' => '# Description @@ -1476,8 +1477,8 @@ The OCR app has some prerequisites: For further information see the homepage or the appropriate documentation.', ], - 'de' => - [ + 'de' + => [ 'name' => 'OCR', 'summary' => 'Schrifterkennung für Bilder (mit Text) und PDF Dateien.', 'description' => '# Beschreibung @@ -1501,10 +1502,10 @@ Für weiter Informationen besuchen Sie die Homepage oder lesen Sie die zutreffen ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Janis Koehr', 'mail' => '', 'homepage' => '', @@ -1539,11 +1540,11 @@ yA1z/MCBEyTRo80jxFmL+MpwbsdbUJi7Qxlnd56zb6HHDGrLHXZTh9LXgyVbnhWL kxomWjIXQh4aMHQL4QF7U4EK -----END CERTIFICATE-----', ], - 14 => - [ + 14 + => [ 'id' => 'spreedme', - 'categories' => - [ + 'categories' + => [ 0 => 'tools', ], 'userDocs' => 'https://github.com/strukturag/nextcloud-spreedme/blob/master/README.md', @@ -1553,27 +1554,27 @@ kxomWjIXQh4aMHQL4QF7U4EK 'website' => '', 'created' => '2016-09-27T08:43:07.835196Z', 'lastModified' => '2016-11-21T16:51:23.703819Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.3.4', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://apps.owncloud.com/CONTENT/content-files/174436-spreedme.tar.gz', 'created' => '2016-11-21T16:51:23.689599Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-21T16:51:23.826509Z', @@ -1591,44 +1592,44 @@ bOks45K5gE1da4QpkYOUQa3GVMNPqPiT3CqjmJ8tjxq7bGpb6v+YoCLACjjPpPZL 2Y28qLxwHVaINDFUUxD75WWdrlulRbqHwiSw8jolP9qrpXhDuLAqYam9tRwV5K5R 8uNawnFwWkicBEYkN/WtBTouWzehOPn38tHXov6SyEyD6lkuxUBZrsGQ2ru+t33U k0kKCbV0GFw43I+3Ji5DiB4TUVNZYVoPG1B7Qve+UfA=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/conference.gif', ], - 1 => - [ + 1 + => [ 'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/presentation.png', ], - 2 => - [ + 2 + => [ 'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/import.png', ], - 3 => - [ + 3 + => [ 'url' => 'https://raw.githubusercontent.com/strukturag/nextcloud-spreedme/master/screenshots/appstore/users.png', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Spreed.ME', 'summary' => 'Audio-, video- and text chat for your Nextcloud', 'description' => 'Securely communicate with your friends and family using rich audio-, video- and text chat, and much more right from your Nextcloud – in your browser', ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'struktur AG', 'mail' => '', 'homepage' => '', @@ -1663,11 +1664,11 @@ sUNUEU2Decyp0jxLVnrrpz6Y5UupfBR0V8yAv1t5Od/mCKLc5DxHsDWiKOpsob9U JN+bdzJil2NNftihD4Dm7Ha7OS3O8W0= -----END CERTIFICATE-----', ], - 15 => - [ + 15 + => [ 'id' => 'nextant', - 'categories' => - [ + 'categories' + => [ 0 => 'files', 1 => 'tools', ], @@ -1678,27 +1679,27 @@ JN+bdzJil2NNftihD4Dm7Ha7OS3O8W0= 'website' => 'https://github.com/nextcloud/nextant/wiki', 'created' => '2016-09-14T14:34:35.977699Z', 'lastModified' => '2016-11-22T16:02:57.758477Z', - 'releases' => - [ - 0 => - [ + 'releases' + => [ + 0 + => [ 'version' => '0.6.6', - 'phpExtensions' => - [ + 'phpExtensions' + => [ ], - 'databases' => - [ + 'databases' + => [ ], - 'shellCommands' => - [ + 'shellCommands' + => [ ], 'phpVersionSpec' => '*', 'platformVersionSpec' => '>=9.0.0 <12.0.0', 'minIntSize' => 32, 'download' => 'https://github.com/nextcloud/nextant/releases/download/v0.6.6/nextant-0.6.6.tar.gz', 'created' => '2016-11-16T15:11:14.344704Z', - 'licenses' => - [ + 'licenses' + => [ 0 => 'agpl', ], 'lastModified' => '2016-11-16T20:39:59.030384Z', @@ -1716,26 +1717,26 @@ oAKv2GkvWPQ0aiiBtA1i4oXuzvHW/M2wOrK7v7DCpNfILrD/sjxpljxcX082nRCd 9P3iPd2hQ6yOM9fG21LVN74b6wggI81BzFf/xJPd4ZqYLjfeG/yqd0zaiMOzMm1W se+kc/a4iB3BoCNX3E942pBBzew4ya8LkCXdCHUUsuelDf1va1ikTh/G7D84ll9/ 2avNqQnUh3hgOnxFCLI/5VrbqxfSTVdO6O/LTuAmwgw=', - 'translations' => - [ + 'translations' + => [ ], ], ], - 'screenshots' => - [ - 0 => - [ + 'screenshots' + => [ + 0 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/displayResult.jpg', ], - 1 => - [ + 1 + => [ 'url' => 'https://raw.githubusercontent.com/nextcloud/nextant/master/screenshots/admin.jpg', ], ], - 'translations' => - [ - 'en' => - [ + 'translations' + => [ + 'en' + => [ 'name' => 'Nextant', 'summary' => 'Navigate through your cloud using Solr', 'description' => ' @@ -1777,10 +1778,10 @@ se+kc/a4iB3BoCNX3E942pBBzew4ya8LkCXdCHUUsuelDf1va1ikTh/G7D84ll9/ ], ], 'isFeatured' => false, - 'authors' => - [ - 0 => - [ + 'authors' + => [ + 0 + => [ 'name' => 'Maxence Lange', 'mail' => '', 'homepage' => '', diff --git a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php index 0beb68bf03a..a703a037653 100644 --- a/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php +++ b/tests/lib/App/AppStore/Fetcher/CategoryFetcherTest.php @@ -1,4 +1,5 @@ >> * [appId => [configKey, configValue, valueType, lazy, sensitive]] */ - private static array $baseStruct = - [ + private static array $baseStruct + = [ 'testapp' => [ 'enabled' => ['enabled', 'yes'], 'installed_version' => ['installed_version', '1.2.3'], diff --git a/tests/lib/AppFramework/AppTest.php b/tests/lib/AppFramework/AppTest.php index b44ddd6082b..64b4bccbac6 100644 --- a/tests/lib/AppFramework/AppTest.php +++ b/tests/lib/AppFramework/AppTest.php @@ -63,11 +63,11 @@ class AppTest extends \Test\TestCase { $infoXmlPath = $this->appPath . '/appinfo/info.xml'; mkdir($this->appPath . '/appinfo', 0777, true); - $xml = '' . - '' . - 'namespacetestapp' . - 'NameSpaceTestApp' . - ''; + $xml = '' + . '' + . 'namespacetestapp' + . 'NameSpaceTestApp' + . ''; file_put_contents($infoXmlPath, $xml); } diff --git a/tests/lib/AppFramework/Controller/AuthPublicShareControllerTest.php b/tests/lib/AppFramework/Controller/AuthPublicShareControllerTest.php index bcc0daf002f..4efcac2dccf 100644 --- a/tests/lib/AppFramework/Controller/AuthPublicShareControllerTest.php +++ b/tests/lib/AppFramework/Controller/AuthPublicShareControllerTest.php @@ -1,4 +1,5 @@ setOCSVersion(1); - $expected = "\n" . - "\n" . - " \n" . - " ok\n" . - " 100\n" . - " OK\n" . - " \n" . - " \n" . - " \n" . - " \n" . - " hi\n" . - " \n" . - "\n"; + $expected = "\n" + . "\n" + . " \n" + . " ok\n" + . " 100\n" + . " OK\n" + . " \n" + . " \n" + . " \n" + . " \n" + . " hi\n" + . " \n" + . "\n"; $params = new DataResponse(['test' => 'hi']); @@ -81,8 +81,8 @@ class OCSControllerTest extends \Test\TestCase { $this->createMock(IConfig::class) )); $controller->setOCSVersion(1); - $expected = '{"ocs":{"meta":{"status":"ok","statuscode":100,"message":"OK",' . - '"totalitems":"","itemsperpage":""},"data":{"test":"hi"}}}'; + $expected = '{"ocs":{"meta":{"status":"ok","statuscode":100,"message":"OK",' + . '"totalitems":"","itemsperpage":""},"data":{"test":"hi"}}}'; $params = new DataResponse(['test' => 'hi']); $response = $controller->buildResponse($params, 'json'); @@ -99,17 +99,17 @@ class OCSControllerTest extends \Test\TestCase { )); $controller->setOCSVersion(2); - $expected = "\n" . - "\n" . - " \n" . - " ok\n" . - " 200\n" . - " OK\n" . - " \n" . - " \n" . - " hi\n" . - " \n" . - "\n"; + $expected = "\n" + . "\n" + . " \n" + . " ok\n" + . " 200\n" + . " OK\n" + . " \n" + . " \n" + . " hi\n" + . " \n" + . "\n"; $params = new DataResponse(['test' => 'hi']); diff --git a/tests/lib/AppFramework/Controller/PublicShareControllerTest.php b/tests/lib/AppFramework/Controller/PublicShareControllerTest.php index 97216845617..48ec17b3edf 100644 --- a/tests/lib/AppFramework/Controller/PublicShareControllerTest.php +++ b/tests/lib/AppFramework/Controller/PublicShareControllerTest.php @@ -1,4 +1,5 @@ request = new Request( [ - 'server' => - [ + 'server' + => [ 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'REQUEST_URI' => 'nextcloud/index.php/apps/specialapp' ] @@ -680,8 +681,8 @@ class SecurityMiddlewareTest extends \Test\TestCase { public function testAfterExceptionReturnsTemplateResponse(SecurityException $exception): void { $this->request = new Request( [ - 'server' => - [ + 'server' + => [ 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'REQUEST_URI' => 'nextcloud/index.php/apps/specialapp' ] diff --git a/tests/lib/AppFramework/OCS/BaseResponseTest.php b/tests/lib/AppFramework/OCS/BaseResponseTest.php index a04f517db0b..e04f7856623 100644 --- a/tests/lib/AppFramework/OCS/BaseResponseTest.php +++ b/tests/lib/AppFramework/OCS/BaseResponseTest.php @@ -50,7 +50,7 @@ class BaseResponseTest extends \Test\TestCase { $writer->outputMemory(true) ); } - + public function testToXmlJsonSerializable(): void { /** @var BaseResponse $response */ $response = $this->createMock(BaseResponse::class); diff --git a/tests/lib/AppScriptSortTest.php b/tests/lib/AppScriptSortTest.php index ae7b5c326ec..7dc2bde1897 100644 --- a/tests/lib/AppScriptSortTest.php +++ b/tests/lib/AppScriptSortTest.php @@ -1,4 +1,5 @@ expects($this->once()) ->method('insert') ->with($this->callback(function (PublicKeyToken $token) use ($user, $uid, $name) { - return $token->getUID() === $uid && - $token->getLoginName() === $user && - $token->getName() === $name && - $token->getType() === IToken::DO_NOT_REMEMBER && - $token->getLastActivity() === $this->time && - $token->getPassword() === null; + return $token->getUID() === $uid + && $token->getLoginName() === $user + && $token->getName() === $name + && $token->getType() === IToken::DO_NOT_REMEMBER + && $token->getLastActivity() === $this->time + && $token->getPassword() === null; })); $this->mapper ->expects($this->once()) @@ -426,13 +426,13 @@ class PublicKeyTokenProviderTest extends TestCase { ->expects($this->once()) ->method('insert') ->with($this->callback(function (PublicKeyToken $token) use ($user, $uid, $name): bool { - return $token->getUID() === $uid && - $token->getLoginName() === $user && - $token->getName() === $name && - $token->getType() === IToken::DO_NOT_REMEMBER && - $token->getLastActivity() === $this->time && - $token->getPassword() !== null && - $this->tokenProvider->getPassword($token, 'newIdtokentokentokentoken') === 'password'; + return $token->getUID() === $uid + && $token->getLoginName() === $user + && $token->getName() === $name + && $token->getType() === IToken::DO_NOT_REMEMBER + && $token->getLastActivity() === $this->time + && $token->getPassword() !== null + && $this->tokenProvider->getPassword($token, 'newIdtokentokentokentoken') === 'password'; })); $this->mapper ->expects($this->once()) diff --git a/tests/lib/Authentication/TwoFactorAuth/EnforcementStateTest.php b/tests/lib/Authentication/TwoFactorAuth/EnforcementStateTest.php index 5323a36867a..f1d38c10801 100644 --- a/tests/lib/Authentication/TwoFactorAuth/EnforcementStateTest.php +++ b/tests/lib/Authentication/TwoFactorAuth/EnforcementStateTest.php @@ -1,4 +1,5 @@ expectException(InvalidProviderException::class); @@ -88,7 +88,7 @@ class ProviderManagerTest extends TestCase { $this->assertTrue($res); } - + public function testTryDisableInvalidProvider(): void { $this->expectException(InvalidProviderException::class); diff --git a/tests/lib/Avatar/AvatarManagerTest.php b/tests/lib/Avatar/AvatarManagerTest.php index 5fac90e0f34..3ce9fc41800 100644 --- a/tests/lib/Avatar/AvatarManagerTest.php +++ b/tests/lib/Avatar/AvatarManagerTest.php @@ -1,4 +1,5 @@ assertNull($this->instance->get('value1')); $this->assertFalse($this->instance->hasKey('value1')); - + $value = 'foobar'; $this->instance->set('value1', $value); $this->assertTrue($this->instance->hasKey('value1')); diff --git a/tests/lib/Calendar/ManagerTest.php b/tests/lib/Calendar/ManagerTest.php index 7f8afc0247b..a136dac3224 100644 --- a/tests/lib/Calendar/ManagerTest.php +++ b/tests/lib/Calendar/ManagerTest.php @@ -1,4 +1,5 @@ 'user', 'id' => 'bar@foo.org@foobar.io'], ['type' => 'user', 'id' => '23452-4333-54353-2342'], diff --git a/tests/lib/Comments/FakeFactory.php b/tests/lib/Comments/FakeFactory.php index 19d8b58ae01..0c3241078d7 100644 --- a/tests/lib/Comments/FakeFactory.php +++ b/tests/lib/Comments/FakeFactory.php @@ -1,4 +1,5 @@ >> [userId => [appId => prefKey, prefValue, valueType, lazy, sensitive]]] */ - private array $basePreferences = - [ - 'user1' => - [ + private array $basePreferences + = [ + 'user1' + => [ 'app1' => [ 'key1' => ['key1', 'value1'], 'key22' => ['key22', '31'], @@ -98,8 +98,8 @@ class UserConfigTest extends TestCase { 'key5' => ['key5', true, ValueType::BOOL, true], ] ], - 'user2' => - [ + 'user2' + => [ 'app1' => [ '1' => ['1', 'value1'], '2' => ['2', 'value2', ValueType::STRING, true, UserConfig::FLAG_SENSITIVE], @@ -121,8 +121,8 @@ class UserConfigTest extends TestCase { 'key1' => ['key1', 'value1', ValueType::STRING, true, 0, true] ] ], - 'user3' => - [ + 'user3' + => [ 'app2' => [ 'key2' => ['key2', 'value2c', ValueType::MIXED, false, 0, true], 'key3' => ['key3', 'value3', ValueType::STRING, true, ], @@ -138,8 +138,8 @@ class UserConfigTest extends TestCase { 'key3' => ['key3', 'value3', ValueType::STRING, true] ] ], - 'user4' => - [ + 'user4' + => [ 'app2' => [ 'key1' => ['key1', 'value1'], 'key2' => ['key2', 'value2A', ValueType::MIXED, false, 0, true], @@ -153,8 +153,8 @@ class UserConfigTest extends TestCase { 'key1' => ['key1', 123, ValueType::INT, true, 0, true] ] ], - 'user5' => - [ + 'user5' + => [ 'app1' => [ 'key1' => ['key1', 'value1'] ], @@ -1563,8 +1563,8 @@ class UserConfigTest extends TestCase { $this->assertEquals($sensitive, $userConfig->isSensitive($userId, $app, $key)); if ($sensitive) { $this->assertEquals(true, str_starts_with( - $userConfig->statusCache()['fastCache'][$userId][$app][$key] ?? - $userConfig->statusCache()['lazyCache'][$userId][$app][$key], + $userConfig->statusCache()['fastCache'][$userId][$app][$key] + ?? $userConfig->statusCache()['lazyCache'][$userId][$app][$key], '$UserConfigEncryption$') ); } @@ -1594,8 +1594,8 @@ class UserConfigTest extends TestCase { $userConfig->getValueString($userId, $app, $key); // cache loading for userId $this->assertEquals( !$sensitive, str_starts_with( - $userConfig->statusCache()['fastCache'][$userId][$app][$key] ?? - $userConfig->statusCache()['lazyCache'][$userId][$app][$key], + $userConfig->statusCache()['fastCache'][$userId][$app][$key] + ?? $userConfig->statusCache()['lazyCache'][$userId][$app][$key], '$UserConfigEncryption$' ) ); @@ -1608,8 +1608,8 @@ class UserConfigTest extends TestCase { $this->assertEquals($sensitive, $userConfig->isSensitive($userId, $app, $key)); // should only work if updateGlobalSensitive drop cache $this->assertEquals($sensitive, str_starts_with( - $userConfig->statusCache()['fastCache'][$userId][$app][$key] ?? - $userConfig->statusCache()['lazyCache'][$userId][$app][$key], + $userConfig->statusCache()['fastCache'][$userId][$app][$key] + ?? $userConfig->statusCache()['lazyCache'][$userId][$app][$key], '$UserConfigEncryption$') ); } diff --git a/tests/lib/ConfigTest.php b/tests/lib/ConfigTest.php index 89135e0cffd..b2a52dbd6a4 100644 --- a/tests/lib/ConfigTest.php +++ b/tests/lib/ConfigTest.php @@ -1,4 +1,5 @@ assertSame('moo', $config->getValue('foo')); $content = file_get_contents($this->configFile); - $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " . - " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n"; + $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " + . " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n"; $this->assertEquals($expected, $content); $config->setValue('bar', 'red'); @@ -107,9 +108,9 @@ class ConfigTest extends TestCase { $content = file_get_contents($this->configFile); - $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " . - " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n 'bar' => 'red',\n 'apps' => \n " . - " array (\n 0 => 'files',\n 1 => 'gallery',\n ),\n);\n"; + $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " + . " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n 'bar' => 'red',\n 'apps' => \n " + . " array (\n 0 => 'files',\n 1 => 'gallery',\n ),\n);\n"; $this->assertEquals($expected, $content); } @@ -138,8 +139,8 @@ class ConfigTest extends TestCase { $this->assertSame(null, $config->getValue('not_exists')); $content = file_get_contents($this->configFile); - $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " . - " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n);\n"; + $expected = " 'moo',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " + . " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n);\n"; $this->assertEquals($expected, $content); } @@ -149,8 +150,8 @@ class ConfigTest extends TestCase { $this->assertSame('this_was_clearly_not_set_before', $config->getValue('foo', 'this_was_clearly_not_set_before')); $content = file_get_contents($this->configFile); - $expected = " \n array (\n 0 => 'Appenzeller',\n " . - " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n"; + $expected = " \n array (\n 0 => 'Appenzeller',\n " + . " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n);\n"; $this->assertEquals($expected, $content); } @@ -169,9 +170,9 @@ class ConfigTest extends TestCase { // Write a new value to the config $config->setValue('CoolWebsites', ['demo.owncloud.org', 'owncloud.org', 'owncloud.com']); - $expected = " 'bar',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " . - " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n 'php53' => 'totallyOutdated',\n 'CoolWebsites' => \n array (\n " . - " 0 => 'demo.owncloud.org',\n 1 => 'owncloud.org',\n 2 => 'owncloud.com',\n ),\n);\n"; + $expected = " 'bar',\n 'beers' => \n array (\n 0 => 'Appenzeller',\n " + . " 1 => 'Guinness',\n 2 => 'Kölsch',\n ),\n 'alcohol_free' => false,\n 'php53' => 'totallyOutdated',\n 'CoolWebsites' => \n array (\n " + . " 0 => 'demo.owncloud.org',\n 1 => 'owncloud.org',\n 2 => 'owncloud.com',\n ),\n);\n"; $this->assertEquals($expected, file_get_contents($this->configFile)); // Cleanup diff --git a/tests/lib/ContactsManagerTest.php b/tests/lib/ContactsManagerTest.php index 5f7e65312f2..378dc6eadde 100644 --- a/tests/lib/ContactsManagerTest.php +++ b/tests/lib/ContactsManagerTest.php @@ -1,4 +1,5 @@ 'OCP\\Migration\\Attributes\\CreateTable', 'table' => 'new_table', 'description' => 'Table is used to store things, but also to get more things', - 'notes' => - [ - 'this is a notice', - 'and another one, if really needed' - ], + 'notes' => [ + 'this is a notice', + 'and another one, if really needed' + ], 'columns' => [] ], [ diff --git a/tests/lib/DB/OCPostgreSqlPlatformTest.php b/tests/lib/DB/OCPostgreSqlPlatformTest.php index bea3adf29a4..af17b01fc13 100644 --- a/tests/lib/DB/OCPostgreSqlPlatformTest.php +++ b/tests/lib/DB/OCPostgreSqlPlatformTest.php @@ -1,4 +1,5 @@ - [function ($q) { + '1 column: string param unicode' + => [function ($q) { return [false, [$q->createNamedParameter('👍')], '👍']; }], - '2 columns: string param and string param' => - [function ($q) { + '2 columns: string param and string param' + => [function ($q) { return [false, [$q->createNamedParameter('foo'), $q->createNamedParameter('bar')], 'foobar']; }], - '2 columns: string param and int literal' => - [function ($q) { + '2 columns: string param and int literal' + => [function ($q) { return [false, [$q->createNamedParameter('foo'), $q->expr()->literal(1)], 'foo1']; }], - '2 columns: string param and string literal' => - [function ($q) { + '2 columns: string param and string literal' + => [function ($q) { return [false, [$q->createNamedParameter('foo'), $q->expr()->literal('bar')], 'foobar']; }], - '2 columns: string real and int literal' => - [function ($q) { + '2 columns: string real and int literal' + => [function ($q) { return [true, ['configkey', $q->expr()->literal(2)], '12']; }], - '4 columns: string literal' => - [function ($q) { + '4 columns: string literal' + => [function ($q) { return [false, [$q->expr()->literal('foo'), $q->expr()->literal('bar'), $q->expr()->literal('foo'), $q->expr()->literal('bar')], 'foobarfoobar']; }], - '4 columns: int literal' => - [function ($q) { + '4 columns: int literal' + => [function ($q) { return [false, [$q->expr()->literal(1), $q->expr()->literal(2), $q->expr()->literal(3), $q->expr()->literal(4)], '1234']; }], - '5 columns: string param with special chars used in the function' => - [function ($q) { + '5 columns: string param with special chars used in the function' + => [function ($q) { return [false, [$q->createNamedParameter('b'), $q->createNamedParameter("'"), $q->createNamedParameter('||'), $q->createNamedParameter(','), $q->createNamedParameter('a')], "b'||,a"]; }], ]; diff --git a/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php b/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php index 697b3ab92c9..f99adc73aa8 100644 --- a/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php @@ -1,4 +1,5 @@ getTestBackend( - GroupInterface::ADD_TO_GROUP | - GroupInterface::REMOVE_FROM_GOUP | - GroupInterface::COUNT_USERS | - GroupInterface::CREATE_GROUP | - GroupInterface::DELETE_GROUP | - GroupInterface::GROUP_DETAILS + GroupInterface::ADD_TO_GROUP + | GroupInterface::REMOVE_FROM_GOUP + | GroupInterface::COUNT_USERS + | GroupInterface::CREATE_GROUP + | GroupInterface::DELETE_GROUP + | GroupInterface::GROUP_DETAILS ); $backend->expects($this->any()) ->method('groupExists') @@ -242,12 +242,12 @@ class ManagerTest extends TestCase { /** @var \PHPUnit\Framework\MockObject\MockObject|\OC\Group\Backend $backend */ $backendGroupCreated = false; $backend = $this->getTestBackend( - GroupInterface::ADD_TO_GROUP | - GroupInterface::REMOVE_FROM_GOUP | - GroupInterface::COUNT_USERS | - GroupInterface::CREATE_GROUP | - GroupInterface::DELETE_GROUP | - GroupInterface::GROUP_DETAILS + GroupInterface::ADD_TO_GROUP + | GroupInterface::REMOVE_FROM_GOUP + | GroupInterface::COUNT_USERS + | GroupInterface::CREATE_GROUP + | GroupInterface::DELETE_GROUP + | GroupInterface::GROUP_DETAILS ); $groupName = str_repeat('x', 256); $backend->expects($this->any()) @@ -955,12 +955,12 @@ class ManagerTest extends TestCase { * @var \PHPUnit\Framework\MockObject\MockObject | \OC\Group\Backend $backend */ $backend = $this->getTestBackend( - GroupInterface::ADD_TO_GROUP | - GroupInterface::REMOVE_FROM_GOUP | - GroupInterface::COUNT_USERS | - GroupInterface::CREATE_GROUP | - GroupInterface::DELETE_GROUP | - GroupInterface::GROUP_DETAILS + GroupInterface::ADD_TO_GROUP + | GroupInterface::REMOVE_FROM_GOUP + | GroupInterface::COUNT_USERS + | GroupInterface::CREATE_GROUP + | GroupInterface::DELETE_GROUP + | GroupInterface::GROUP_DETAILS ); $backend->expects($this->any()) ->method('getGroupDetails') diff --git a/tests/lib/Group/MetaDataTest.php b/tests/lib/Group/MetaDataTest.php index 1b58432fd88..dee59eab8da 100644 --- a/tests/lib/Group/MetaDataTest.php +++ b/tests/lib/Group/MetaDataTest.php @@ -1,4 +1,5 @@ method('createLocal') ->with('NegativeDnsCache') ->willReturn($this->cache); - + $this->negativeDnsCache = new NegativeDnsCache($this->cacheFactory); } diff --git a/tests/lib/Http/Client/ResponseTest.php b/tests/lib/Http/Client/ResponseTest.php index 291dc287148..1acf1eb1cbd 100644 --- a/tests/lib/Http/Client/ResponseTest.php +++ b/tests/lib/Http/Client/ResponseTest.php @@ -1,4 +1,5 @@ assertSame(\OC_App::getAppPath('files'), $this->locator->getAppPath('files')); } - + public function testGetAppPathNotExistentApp(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('App not found'); diff --git a/tests/lib/IntegrityCheck/Helpers/EnvironmentHelperTest.php b/tests/lib/IntegrityCheck/Helpers/EnvironmentHelperTest.php index 379eb178b06..caa5ed2e782 100644 --- a/tests/lib/IntegrityCheck/Helpers/EnvironmentHelperTest.php +++ b/tests/lib/IntegrityCheck/Helpers/EnvironmentHelperTest.php @@ -1,4 +1,5 @@ assertSame($data, $this->fileAccessHelper->file_get_contents($filePath)); } - + public function testFile_put_contentsWithException(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Failed to write into /anabsolutelynotexistingfolder/on/the/system.txt'); @@ -43,7 +44,7 @@ class FileAccessHelperTest extends TestCase { $this->assertTrue($this->fileAccessHelper->is_writable(Server::get(ITempManager::class)->getTemporaryFile('MyFile'))); } - + public function testAssertDirectoryExistsWithException(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Directory /anabsolutelynotexistingfolder/on/the/system does not exist.'); diff --git a/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php b/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php index 1d0b3e4f24d..f6507a6ee3d 100644 --- a/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php +++ b/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php @@ -1,4 +1,5 @@ expectException(\UnexpectedValueException::class); diff --git a/tests/lib/LegacyHelperTest.php b/tests/lib/LegacyHelperTest.php index 0938640b892..858069410ff 100644 --- a/tests/lib/LegacyHelperTest.php +++ b/tests/lib/LegacyHelperTest.php @@ -1,4 +1,5 @@ assertFalse($this->instance->isLocked('foo', ILockingProvider::LOCK_SHARED)); } - + public function testDoubleExclusiveLock(): void { $this->expectException(LockedException::class); @@ -76,7 +77,7 @@ abstract class LockingProvider extends TestCase { $this->instance->acquireLock('foo', ILockingProvider::LOCK_EXCLUSIVE); } - + public function testExclusiveLockAfterShared(): void { $this->expectException(LockedException::class); @@ -150,7 +151,7 @@ abstract class LockingProvider extends TestCase { } - + public function testSharedLockAfterExclusive(): void { $this->expectException(LockedException::class); @@ -197,7 +198,7 @@ abstract class LockingProvider extends TestCase { $this->assertTrue($this->instance->isLocked('foo', ILockingProvider::LOCK_SHARED)); } - + public function testChangeLockToExclusiveDoubleShared(): void { $this->expectException(LockedException::class); @@ -206,14 +207,14 @@ abstract class LockingProvider extends TestCase { $this->instance->changeLock('foo', ILockingProvider::LOCK_EXCLUSIVE); } - + public function testChangeLockToExclusiveNoShared(): void { $this->expectException(LockedException::class); $this->instance->changeLock('foo', ILockingProvider::LOCK_EXCLUSIVE); } - + public function testChangeLockToExclusiveFromExclusive(): void { $this->expectException(LockedException::class); @@ -221,14 +222,14 @@ abstract class LockingProvider extends TestCase { $this->instance->changeLock('foo', ILockingProvider::LOCK_EXCLUSIVE); } - + public function testChangeLockToSharedNoExclusive(): void { $this->expectException(LockedException::class); $this->instance->changeLock('foo', ILockingProvider::LOCK_SHARED); } - + public function testChangeLockToSharedFromShared(): void { $this->expectException(LockedException::class); diff --git a/tests/lib/Lock/MemcacheLockingProviderTest.php b/tests/lib/Lock/MemcacheLockingProviderTest.php index ec8ded11d1e..91f9c8811ed 100644 --- a/tests/lib/Lock/MemcacheLockingProviderTest.php +++ b/tests/lib/Lock/MemcacheLockingProviderTest.php @@ -1,4 +1,5 @@ assertEquals('user1@testing.com', $this->address->getAddress()); // test set by setter @@ -34,7 +34,7 @@ class AddressTest extends TestCase { } public function testLabel(): void { - + // test set by constructor $this->assertEquals('User One', $this->address->getLabel()); // test set by setter diff --git a/tests/lib/Mail/Provider/AttachmentTest.php b/tests/lib/Mail/Provider/AttachmentTest.php index 283391650b5..f02b1d54a7b 100644 --- a/tests/lib/Mail/Provider/AttachmentTest.php +++ b/tests/lib/Mail/Provider/AttachmentTest.php @@ -29,7 +29,7 @@ class AttachmentTest extends TestCase { } public function testName(): void { - + // test set by constructor $this->assertEquals('example1.txt', $this->attachment->getName()); // test set by setter @@ -39,7 +39,7 @@ class AttachmentTest extends TestCase { } public function testType(): void { - + // test set by constructor $this->assertEquals('text/plain', $this->attachment->getType()); // test set by setter @@ -49,7 +49,7 @@ class AttachmentTest extends TestCase { } public function testContents(): void { - + // test set by constructor $this->assertEquals('This is the contents of a file', $this->attachment->getContents()); // test set by setter @@ -59,7 +59,7 @@ class AttachmentTest extends TestCase { } public function testEmbedded(): void { - + // test set by constructor $this->assertEquals(false, $this->attachment->getEmbedded()); // test set by setter diff --git a/tests/lib/Mail/Provider/MessageTest.php b/tests/lib/Mail/Provider/MessageTest.php index 1791a03421c..6b387e5b010 100644 --- a/tests/lib/Mail/Provider/MessageTest.php +++ b/tests/lib/Mail/Provider/MessageTest.php @@ -56,14 +56,14 @@ class MessageTest extends TestCase { } public function testId(): void { - + // test set by constructor $this->assertEquals('cd02ea42-feac-4863-b9d8-484d16a587ea', $this->message->id()); } public function testFrom(): void { - + // test not set $this->assertNull($this->message->getFrom()); // test set by setter @@ -73,7 +73,7 @@ class MessageTest extends TestCase { } public function testReplyTo(): void { - + // test not set $this->assertNull($this->message->getReplyTo()); // test set by setter @@ -83,7 +83,7 @@ class MessageTest extends TestCase { } public function testTo(): void { - + // test not set $this->assertEquals([], $this->message->getTo()); // test set by setter single @@ -96,7 +96,7 @@ class MessageTest extends TestCase { } public function testCc(): void { - + // test not set $this->assertEquals([], $this->message->getCc()); // test set by setter single @@ -109,7 +109,7 @@ class MessageTest extends TestCase { } public function testBcc(): void { - + // test not set $this->assertEquals([], $this->message->getBcc()); // test set by setter single @@ -122,7 +122,7 @@ class MessageTest extends TestCase { } public function testSubject(): void { - + // test not set $this->assertNull($this->message->getSubject()); // test set by setter @@ -132,7 +132,7 @@ class MessageTest extends TestCase { } public function testBody(): void { - + // test not set $this->assertNull($this->message->getBody()); // test set by setter - text body @@ -149,7 +149,7 @@ class MessageTest extends TestCase { } public function testAttachments(): void { - + // test not set $this->assertEquals([], $this->message->getAttachments()); // test set by setter single diff --git a/tests/lib/Memcache/CasTraitTest.php b/tests/lib/Memcache/CasTraitTest.php index 57000049cc7..9de04fa2726 100644 --- a/tests/lib/Memcache/CasTraitTest.php +++ b/tests/lib/Memcache/CasTraitTest.php @@ -1,4 +1,5 @@ assertEquals('user', $user->getUserId()); } - + public function testGetUserInvalidResponse(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Invalid user response, expected field email not found'); @@ -67,7 +68,7 @@ class OCSTest extends TestCase { $client->getUser('user'); } - + public function testInvalidPassword(): void { $this->expectException(ForbiddenException::class); diff --git a/tests/lib/Remote/InstanceTest.php b/tests/lib/Remote/InstanceTest.php index 027a67010be..560706e4572 100644 --- a/tests/lib/Remote/InstanceTest.php +++ b/tests/lib/Remote/InstanceTest.php @@ -1,4 +1,5 @@ assertEquals(false, $instance2->isActive()); } - + public function testPreventDowngradeAttach(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('refusing to connect to remote instance(example.com) over http that was previously accessible over https'); diff --git a/tests/lib/Repair/CleanTagsTest.php b/tests/lib/Repair/CleanTagsTest.php index 5964fdb7f63..04afabb87d9 100644 --- a/tests/lib/Repair/CleanTagsTest.php +++ b/tests/lib/Repair/CleanTagsTest.php @@ -1,4 +1,5 @@ expiredCertificate = new Certificate($expiredCertificate, 'ExpiredCertificate'); } - + public function testBogusData(): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Certificate could not get parsed.'); diff --git a/tests/lib/ServerTest.php b/tests/lib/ServerTest.php index 58d987a102d..1dd4ba6c1ea 100644 --- a/tests/lib/ServerTest.php +++ b/tests/lib/ServerTest.php @@ -1,4 +1,5 @@ urlGenerator = $this->createMock(IURLGenerator::class); $this->clientService = $this->createMock(IClientService::class); $this->logger = $this->createMock(LoggerInterface::class); - + $this->trait = new CheckServerResponseTraitImplementation( $this->l10n, $this->config, @@ -103,7 +103,7 @@ class CheckServerResponseTraitTest extends TestCase { $this->urlGenerator->expects(self::atLeastOnce()) ->method('getBaseUrl') ->willReturn(self::BASE_URL . $webRoot); - + $result = $this->trait->getTestUrls($url, $isRootRequest); $this->assertEquals($expected, $result); } diff --git a/tests/lib/SetupTest.php b/tests/lib/SetupTest.php index f82060dcfa2..a01dfa60ddc 100644 --- a/tests/lib/SetupTest.php +++ b/tests/lib/SetupTest.php @@ -1,4 +1,5 @@ prepare( - 'INSERT INTO `*PREFIX*vcategory_to_object` ' . - '(`objid`, `categoryid`, `type`) VALUES ' . - '(?, ?, ?)' + 'INSERT INTO `*PREFIX*vcategory_to_object` ' + . '(`objid`, `categoryid`, `type`) VALUES ' + . '(?, ?, ?)' ); // insert lots of entries diff --git a/tests/lib/TaskProcessing/TaskProcessingTest.php b/tests/lib/TaskProcessing/TaskProcessingTest.php index 1995b6919ab..9a622cf30d3 100644 --- a/tests/lib/TaskProcessing/TaskProcessingTest.php +++ b/tests/lib/TaskProcessing/TaskProcessingTest.php @@ -1,4 +1,5 @@ method('dispatchTyped') ->with( $this->callback(function (PostLoginEvent $e) { - return $e->getUser()->getUID() === 'foo' && - $e->getPassword() === 'bar' && - $e->isTokenLogin() === false; + return $e->getUser()->getUID() === 'foo' + && $e->getPassword() === 'bar' + && $e->isTokenLogin() === false; }) ); diff --git a/tests/lib/Util/Group/Dummy.php b/tests/lib/Util/Group/Dummy.php index 50edc15c845..fab94cdc645 100644 --- a/tests/lib/Util/Group/Dummy.php +++ b/tests/lib/Util/Group/Dummy.php @@ -1,4 +1,5 @@ getBaseUrl() . '" target="_blank">' . $this->getEntity() . '' . - '
' . $this->getSlogan(); + $footer = '© ' . date('Y') . ' ' . $this->getEntity() . '' + . '
' . $this->getSlogan(); return $footer; }