diff options
Diffstat (limited to 'apps/files_versions/lib/AppInfo/Application.php')
-rw-r--r-- | apps/files_versions/lib/AppInfo/Application.php | 110 |
1 files changed, 66 insertions, 44 deletions
diff --git a/apps/files_versions/lib/AppInfo/Application.php b/apps/files_versions/lib/AppInfo/Application.php index afbd42ffc3f..29158276415 100644 --- a/apps/files_versions/lib/AppInfo/Application.php +++ b/apps/files_versions/lib/AppInfo/Application.php @@ -1,50 +1,54 @@ <?php + /** - * @copyright Copyright (c) 2016, ownCloud, Inc. - * - * @author Christoph Wurst <christoph@winzerhof-wurst.at> - * @author John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> - * @author Morris Jobke <hey@morrisjobke.de> - * @author Robin Appelman <robin@icewind.nl> - * @author Roeland Jago Douma <roeland@famdouma.nl> - * @author Victor Dubiniuk <dubiniuk@owncloud.com> - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see <http://www.gnu.org/licenses/> - * + * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only */ - namespace OCA\Files_Versions\AppInfo; +use OC\KnownUser\KnownUserService; use OCA\DAV\CalDAV\Proxy\ProxyMapper; use OCA\DAV\Connector\Sabre\Principal; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Files\Event\LoadSidebar; use OCA\Files_Versions\Capabilities; -use OCA\Files_Versions\Hooks; +use OCA\Files_Versions\Events\VersionRestoredEvent; +use OCA\Files_Versions\Listener\FileEventsListener; +use OCA\Files_Versions\Listener\LegacyRollbackListener; use OCA\Files_Versions\Listener\LoadAdditionalListener; use OCA\Files_Versions\Listener\LoadSidebarListener; +use OCA\Files_Versions\Listener\VersionAuthorListener; +use OCA\Files_Versions\Listener\VersionStorageMoveListener; use OCA\Files_Versions\Versions\IVersionManager; use OCA\Files_Versions\Versions\VersionManager; +use OCP\Accounts\IAccountManager; use OCP\App\IAppManager; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; -use OCP\ILogger; +use OCP\Files\Events\Node\BeforeNodeCopiedEvent; +use OCP\Files\Events\Node\BeforeNodeDeletedEvent; +use OCP\Files\Events\Node\BeforeNodeRenamedEvent; +use OCP\Files\Events\Node\BeforeNodeTouchedEvent; +use OCP\Files\Events\Node\BeforeNodeWrittenEvent; +use OCP\Files\Events\Node\NodeCopiedEvent; +use OCP\Files\Events\Node\NodeCreatedEvent; +use OCP\Files\Events\Node\NodeDeletedEvent; +use OCP\Files\Events\Node\NodeRenamedEvent; +use OCP\Files\Events\Node\NodeTouchedEvent; +use OCP\Files\Events\Node\NodeWrittenEvent; +use OCP\IConfig; +use OCP\IGroupManager; use OCP\IServerContainer; +use OCP\IUserManager; +use OCP\IUserSession; +use OCP\L10N\IFactory; +use OCP\Server; +use OCP\Share\IManager as IShareManager; use Psr\Container\ContainerInterface; +use Psr\Log\LoggerInterface; class Application extends App implements IBootstrap { public const APP_ID = 'files_versions'; @@ -66,38 +70,56 @@ class Application extends App implements IBootstrap { /** @var IServerContainer $server */ $server = $c->get(IServerContainer::class); return new Principal( - $server->getUserManager(), - $server->getGroupManager(), - $server->getShareManager(), - $server->getUserSession(), - $server->getAppManager(), + $server->get(IUserManager::class), + $server->get(IGroupManager::class), + Server::get(IAccountManager::class), + $server->get(IShareManager::class), + $server->get(IUserSession::class), + $server->get(IAppManager::class), $server->get(ProxyMapper::class), - $server->getConfig() + $server->get(KnownUserService::class), + $server->get(IConfig::class), + $server->get(IFactory::class), ); }); - $context->registerService(IVersionManager::class, function () { - return new VersionManager(); - }); + $context->registerServiceAlias(IVersionManager::class, VersionManager::class); /** * Register Events */ $context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); $context->registerEventListener(LoadSidebar::class, LoadSidebarListener::class); + + $context->registerEventListener(BeforeNodeRenamedEvent::class, VersionStorageMoveListener::class); + $context->registerEventListener(NodeRenamedEvent::class, VersionStorageMoveListener::class); + $context->registerEventListener(BeforeNodeCopiedEvent::class, VersionStorageMoveListener::class); + $context->registerEventListener(NodeCopiedEvent::class, VersionStorageMoveListener::class); + + $context->registerEventListener(NodeCreatedEvent::class, FileEventsListener::class); + $context->registerEventListener(BeforeNodeTouchedEvent::class, FileEventsListener::class); + $context->registerEventListener(NodeTouchedEvent::class, FileEventsListener::class); + $context->registerEventListener(BeforeNodeWrittenEvent::class, FileEventsListener::class); + $context->registerEventListener(NodeWrittenEvent::class, FileEventsListener::class); + $context->registerEventListener(BeforeNodeDeletedEvent::class, FileEventsListener::class); + $context->registerEventListener(NodeDeletedEvent::class, FileEventsListener::class); + $context->registerEventListener(NodeRenamedEvent::class, FileEventsListener::class); + $context->registerEventListener(NodeCopiedEvent::class, FileEventsListener::class); + $context->registerEventListener(BeforeNodeRenamedEvent::class, FileEventsListener::class); + $context->registerEventListener(BeforeNodeCopiedEvent::class, FileEventsListener::class); + + // we add the version author listener with lower priority to make sure new versions already are created by FileEventsListener + $context->registerEventListener(NodeWrittenEvent::class, VersionAuthorListener::class, -1); + + $context->registerEventListener(VersionRestoredEvent::class, LegacyRollbackListener::class); } public function boot(IBootContext $context): void { $context->injectFn(\Closure::fromCallable([$this, 'registerVersionBackends'])); - - /** - * Register hooks - */ - Hooks::connectHooks(); } - public function registerVersionBackends(ContainerInterface $container, IAppManager $appManager, ILogger $logger) { - foreach ($appManager->getInstalledApps() as $app) { + public function registerVersionBackends(ContainerInterface $container, IAppManager $appManager, LoggerInterface $logger): void { + foreach ($appManager->getEnabledApps() as $app) { $appInfo = $appManager->getAppInfo($app); if (isset($appInfo['versions'])) { $backends = $appInfo['versions']; @@ -114,7 +136,7 @@ class Application extends App implements IBootstrap { } } - private function loadBackend(array $backend, ContainerInterface $container, ILogger $logger) { + private function loadBackend(array $backend, ContainerInterface $container, LoggerInterface $logger): void { /** @var IVersionManager $versionManager */ $versionManager = $container->get(IVersionManager::class); $class = $backend['@value']; @@ -123,7 +145,7 @@ class Application extends App implements IBootstrap { $backendObject = $container->get($class); $versionManager->registerBackend($for, $backendObject); } catch (\Exception $e) { - $logger->logException($e); + $logger->error($e->getMessage(), ['exception' => $e]); } } } |