diff options
author | Joas Schilling <nickvergessen@owncloud.com> | 2016-02-01 11:48:46 +0100 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-02-02 09:57:42 +0100 |
commit | 591613fce222d1902ac9d981ca6ae99e5aea23cc (patch) | |
tree | d4e015b6397b2e46f99b2508c40190c90216b5b0 /lib | |
parent | 9861a7f6ccde73ad551a1d75b36baed3f9edf530 (diff) | |
download | nextcloud-server-591613fce222d1902ac9d981ca6ae99e5aea23cc.tar.gz nextcloud-server-591613fce222d1902ac9d981ca6ae99e5aea23cc.zip |
Dispatch some events when tags are un-/assigned
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/systemtag/managerfactory.php | 10 | ||||
-rw-r--r-- | lib/private/systemtag/systemtagobjectmapper.php | 35 | ||||
-rw-r--r-- | lib/public/systemtag/mapperevent.php | 93 |
3 files changed, 124 insertions, 14 deletions
diff --git a/lib/private/systemtag/managerfactory.php b/lib/private/systemtag/managerfactory.php index 7b7b9558b04..2939caacde8 100644 --- a/lib/private/systemtag/managerfactory.php +++ b/lib/private/systemtag/managerfactory.php @@ -20,11 +20,10 @@ */ namespace OC\SystemTag; -use OCP\SystemTag\ISystemTagManagerFactory; -use OCP\SystemTag\ISystemTagManager; -use OC\SystemTag\SystemTagManager; -use OC\SystemTag\SystemTagObjectMapper; use OCP\IServerContainer; +use OCP\SystemTag\ISystemTagManager; +use OCP\SystemTag\ISystemTagManagerFactory; +use OCP\SystemTag\ISystemTagObjectMapper; /** * Default factory class for system tag managers @@ -72,7 +71,8 @@ class ManagerFactory implements ISystemTagManagerFactory { public function getObjectMapper() { return new SystemTagObjectMapper( $this->serverContainer->getDatabaseConnection(), - $this->getManager() + $this->getManager(), + $this->serverContainer->getEventDispatcher() ); } } diff --git a/lib/private/systemtag/systemtagobjectmapper.php b/lib/private/systemtag/systemtagobjectmapper.php index 458b558ad97..1efb4f0f6e0 100644 --- a/lib/private/systemtag/systemtagobjectmapper.php +++ b/lib/private/systemtag/systemtagobjectmapper.php @@ -28,31 +28,34 @@ use OCP\IDBConnection; use OCP\SystemTag\ISystemTag; use OCP\SystemTag\ISystemTagManager; use OCP\SystemTag\ISystemTagObjectMapper; +use OCP\SystemTag\MapperEvent; use OCP\SystemTag\TagNotFoundException; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class SystemTagObjectMapper implements ISystemTagObjectMapper { const RELATION_TABLE = 'systemtag_object_mapping'; - /** - * @var ISystemTagManager - */ - private $tagManager; + /** @var ISystemTagManager */ + protected $tagManager; - /** - * @var IDBConnection - */ - private $connection; + /** @var IDBConnection */ + protected $connection; + + /** @var EventDispatcherInterface */ + protected $dispatcher; /** * Constructor. * * @param IDBConnection $connection database connection * @param ISystemTagManager $tagManager system tag manager + * @param EventDispatcherInterface $dispatcher */ - public function __construct(IDBConnection $connection, ISystemTagManager $tagManager) { + public function __construct(IDBConnection $connection, ISystemTagManager $tagManager, EventDispatcherInterface $dispatcher) { $this->connection = $connection; $this->tagManager = $tagManager; + $this->dispatcher = $dispatcher; } /** @@ -143,6 +146,13 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper { // ignore existing relations } } + + $this->dispatcher->dispatch(MapperEvent::EVENT_ASSIGN, new MapperEvent( + MapperEvent::EVENT_ASSIGN, + $objectType, + $objId, + $tagIds + )); } /** @@ -164,6 +174,13 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper { ->setParameter('objecttype', $objectType) ->setParameter('tagids', $tagIds, IQueryBuilder::PARAM_INT_ARRAY) ->execute(); + + $this->dispatcher->dispatch(MapperEvent::EVENT_UNASSIGN, new MapperEvent( + MapperEvent::EVENT_UNASSIGN, + $objectType, + $objId, + $tagIds + )); } /** diff --git a/lib/public/systemtag/mapperevent.php b/lib/public/systemtag/mapperevent.php new file mode 100644 index 00000000000..e05a5ce09c8 --- /dev/null +++ b/lib/public/systemtag/mapperevent.php @@ -0,0 +1,93 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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/> + * + */ + +namespace OCP\SystemTag; + +use Symfony\Component\EventDispatcher\Event; + +/** + * Class MapperEvent + * + * @package OCP\SystemTag + * @since 9.0.0 + */ +class MapperEvent extends Event { + + const EVENT_ASSIGN = 'OCP\SystemTag\ISystemTagObjectMapper::assignTags'; + const EVENT_UNASSIGN = 'OCP\SystemTag\ISystemTagObjectMapper::unassignTags'; + + /** @var string */ + protected $event; + /** @var string */ + protected $objectType; + /** @var string */ + protected $objectId; + /** @var int[] */ + protected $tags; + + /** + * DispatcherEvent constructor. + * + * @param string $event + * @param string $objectType + * @param string $objectId + * @param int[] $tags + * @since 9.0.0 + */ + public function __construct($event, $objectType, $objectId, array $tags) { + $this->event = $event; + $this->objectType = $objectType; + $this->objectId = $objectId; + $this->tags = $tags; + } + + /** + * @return string + * @since 9.0.0 + */ + public function getEvent() { + return $this->event; + } + + /** + * @return string + * @since 9.0.0 + */ + public function getObjectType() { + return $this->objectType; + } + + /** + * @return string + * @since 9.0.0 + */ + public function getObjectId() { + return $this->objectId; + } + + /** + * @return int[] + * @since 9.0.0 + */ + public function getTags() { + return $this->tags; + } +} |