Dispatch some events when tags are un-/assigned
This commit is contained in:
parent
9861a7f6cc
commit
591613fce2
5 changed files with 145 additions and 22 deletions
|
@ -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
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
93
lib/public/systemtag/mapperevent.php
Normal file
93
lib/public/systemtag/mapperevent.php
Normal file
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue