]> source.dussan.org Git - nextcloud-server.git/commitdiff
Dispatch some events when tags are un-/assigned
authorJoas Schilling <nickvergessen@owncloud.com>
Mon, 1 Feb 2016 10:48:46 +0000 (11:48 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Tue, 2 Feb 2016 08:57:42 +0000 (09:57 +0100)
lib/private/systemtag/managerfactory.php
lib/private/systemtag/systemtagobjectmapper.php
lib/public/systemtag/mapperevent.php [new file with mode: 0644]
tests/lib/systemtag/systemtagmanagertest.php
tests/lib/systemtag/systemtagobjectmappertest.php

index 7b7b9558b0449b378a426051a9a41591b898df23..2939caacde8ee2a63908803e2c6dcb4fe62ad5f4 100644 (file)
  */
 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()
                );
        }
 }
index 458b558ad97e886ac98c321438a41eff01ff142d..1efb4f0f6e05c47db7550e73d1484cc80fef0137 100644 (file)
@@ -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 (file)
index 0000000..e05a5ce
--- /dev/null
@@ -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;
+       }
+}
index 97c072f33f634df318373c2cf9ea95de59aa6f31..f8d711774797f2964912754e0acc62a5f6ca4c8d 100644 (file)
@@ -378,7 +378,7 @@ class SystemTagManagerTest extends TestCase {
                $tag1 = $this->tagManager->createTag('one', true, false);
                $tag2 = $this->tagManager->createTag('two', true, true);
 
-               $tagMapper = new SystemTagObjectMapper($this->connection, $this->tagManager);
+               $tagMapper = new SystemTagObjectMapper($this->connection, $this->tagManager, $this->dispatcher);
 
                $tagMapper->assignTags(1, 'testtype', $tag1->getId());
                $tagMapper->assignTags(1, 'testtype', $tag2->getId());
index 4ea80c216edcdb09313432cfc43d7b50c81e2621..5c8204f6a8710002760c88c39a309489fa9e17f3 100644 (file)
 
 namespace Test\SystemTag;
 
+use OC\SystemTag\SystemTag;
 use OC\SystemTag\SystemTagManager;
 use OC\SystemTag\SystemTagObjectMapper;
-use \OCP\SystemTag\ISystemTag;
-use \OCP\SystemTag\ISystemTagManager;
-use \OCP\SystemTag\ISystemTagObjectMapper;
-use \OCP\SystemTag\TagNotFoundException;
-use \OCP\IDBConnection;
-use \OC\SystemTag\SystemTag;
+use OCP\IDBConnection;
+use OCP\SystemTag\ISystemTag;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\ISystemTagObjectMapper;
+use OCP\SystemTag\TagNotFoundException;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Test\TestCase;
 
 /**
@@ -43,6 +44,11 @@ class SystemTagObjectMapperTest extends TestCase {
         */
        private $connection;
 
+       /**
+        * @var EventDispatcherInterface
+        */
+       private $dispatcher;
+
        /**
         * @var ISystemTag
         */
@@ -67,7 +73,14 @@ class SystemTagObjectMapperTest extends TestCase {
                $this->tagManager = $this->getMockBuilder('OCP\SystemTag\ISystemTagManager')
                        ->getMock();
 
-               $this->tagMapper = new SystemTagObjectMapper($this->connection, $this->tagManager);
+               $this->dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')
+                       ->getMock();
+
+               $this->tagMapper = new SystemTagObjectMapper(
+                       $this->connection,
+                       $this->tagManager,
+                       $this->dispatcher
+               );
 
                $this->tag1 = new SystemTag(1, 'testtag1', false, false);
                $this->tag2 = new SystemTag(2, 'testtag2', true, false);