@@ -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() | |||
); | |||
} | |||
} |
@@ -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 | |||
)); | |||
} | |||
/** |
@@ -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; | |||
} | |||
} |
@@ -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()); |
@@ -10,14 +10,15 @@ | |||
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); |