diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2017-09-15 12:14:08 +0200 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2017-09-15 12:14:31 +0200 |
commit | 90d76939979ff3e32c5ec4408668f4be64cac3fa (patch) | |
tree | e139a54ff40df58c065bf91bddccbbf5c99c20ec /apps | |
parent | 8500e114575d7e02ffda8070980cc77ba147e60f (diff) | |
download | nextcloud-server-90d76939979ff3e32c5ec4408668f4be64cac3fa.tar.gz nextcloud-server-90d76939979ff3e32c5ec4408668f4be64cac3fa.zip |
allow apps to disable versions for some files
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_versions/lib/Events/CreateVersionEvent.php | 81 | ||||
-rw-r--r-- | apps/files_versions/lib/Storage.php | 12 |
2 files changed, 93 insertions, 0 deletions
diff --git a/apps/files_versions/lib/Events/CreateVersionEvent.php b/apps/files_versions/lib/Events/CreateVersionEvent.php new file mode 100644 index 00000000000..df18d3545f8 --- /dev/null +++ b/apps/files_versions/lib/Events/CreateVersionEvent.php @@ -0,0 +1,81 @@ +<?php +/** + * @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + + +namespace OCA\Files_Versions\Events; + + +use OCP\Files\Node; +use Symfony\Component\EventDispatcher\Event; + + +/** + * Class CreateVersionEvent + * + * Event to allow other apps to disable versions for specific files + * + * @package OCA\Files_Versions + */ +class CreateVersionEvent extends Event { + + + /** @var bool */ + private $createVersion; + + /** @var Node */ + private $node; + + /** + * CreateVersionEvent constructor. + * + * @param Node $node + */ + public function __construct(Node $node) { + $this->createVersion = true; + $this->node = $node; + } + + /** + * get Node of the file which should be versioned + * + * @return Node + */ + public function getNode() { + return $this->node; + } + + /** + * disable versions for this file + */ + public function disableVersions() { + $this->createVersion = false; + } + + /** + * should a version be created for this file? + * + * @return bool + */ + public function shouldCreateVersion() { + return $this->createVersion; + } + +} diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 5e3f87b3646..25c64b89000 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -47,6 +47,7 @@ use OC\Files\Filesystem; use OC\Files\View; use OCA\Files_Versions\AppInfo\Application; use OCA\Files_Versions\Command\Expire; +use OCA\Files_Versions\Events\CreateVersionEvent; use OCP\Files\NotFoundException; use OCP\Lock\ILockingProvider; use OCP\User; @@ -179,6 +180,17 @@ class Storage { $files_view = new View('/'.$uid .'/files'); $users_view = new View('/'.$uid); + $eventDispatcher = \OC::$server->getEventDispatcher(); + $id = $files_view->getFileInfo($filename)->getId(); + $nodes = \OC::$server->getRootFolder()->getById($id); + foreach ($nodes as $node) { + $event = new CreateVersionEvent($node); + $eventDispatcher->dispatch('OCA\Files_Versions::createVersion', $event); + if ($event->shouldCreateVersion() === false) { + return false; + } + } + // no use making versions for empty files if ($files_view->filesize($filename) === 0) { return false; |