*/
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
public function getObjectMapper() {
return new SystemTagObjectMapper(
$this->serverContainer->getDatabaseConnection(),
- $this->getManager()
+ $this->getManager(),
+ $this->serverContainer->getEventDispatcher()
);
}
}
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;
}
/**
// ignore existing relations
}
}
+
+ $this->dispatcher->dispatch(MapperEvent::EVENT_ASSIGN, new MapperEvent(
+ MapperEvent::EVENT_ASSIGN,
+ $objectType,
+ $objId,
+ $tagIds
+ ));
}
/**
->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
+ ));
}
/**
--- /dev/null
+<?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;
+ }
+}
$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());
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;
/**
*/
private $connection;
+ /**
+ * @var EventDispatcherInterface
+ */
+ private $dispatcher;
+
/**
* @var ISystemTag
*/
$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);