summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-02-02 13:08:01 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-02-02 13:08:01 +0100
commit2d1d89ee29e49412192b051412755610e0538198 (patch)
tree7aa78b5317412f2bacf781f599bc29aee70406ab /lib/private
parent37d6fff9761817299a71e9183890267f4290d492 (diff)
parent7f563dc3e9a03284d9eff69214b6686cf9eb1916 (diff)
downloadnextcloud-server-2d1d89ee29e49412192b051412755610e0538198.tar.gz
nextcloud-server-2d1d89ee29e49412192b051412755610e0538198.zip
Merge pull request #22049 from owncloud/issue-22041-activities-for-systemtags
Issue 22041 activities for systemtags
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/activitymanager.php9
-rw-r--r--lib/private/appframework/dependencyinjection/dicontainer.php4
-rw-r--r--lib/private/systemtag/managerfactory.php13
-rw-r--r--lib/private/systemtag/systemtagmanager.php72
-rw-r--r--lib/private/systemtag/systemtagobjectmapper.php35
5 files changed, 101 insertions, 32 deletions
diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php
index e5235cb9bfe..68bb8c13401 100644
--- a/lib/private/activitymanager.php
+++ b/lib/private/activitymanager.php
@@ -310,20 +310,19 @@ class ActivityManager implements IManager {
/**
* @param string $type
- * @param int $id
+ * @param string $id
*/
public function setFormattingObject($type, $id) {
$this->formattingObjectType = $type;
- $this->formattingObjectId = $id;
+ $this->formattingObjectId = (string) $id;
}
/**
* @return bool
*/
public function isFormattingFilteredObject() {
- return 'filter' === $this->request->getParam('filter')
- && $this->formattingObjectType === $this->request->getParam('objecttype')
- && $this->formattingObjectId === $this->request->getParam('objectid');
+ return $this->formattingObjectType === $this->request->getParam('object_type')
+ && $this->formattingObjectId === $this->request->getParam('object_id');
}
/**
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index ff9da88cd81..5fc45fdd2e8 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -152,6 +152,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return $this->getServer()->getL10N($c->query('AppName'));
});
+ $this->registerService('OCP\\L10N\\IFactory', function($c) {
+ return $this->getServer()->getL10NFactory();
+ });
+
$this->registerService('OCP\\ILogger', function($c) {
return $this->getServer()->getLogger();
});
diff --git a/lib/private/systemtag/managerfactory.php b/lib/private/systemtag/managerfactory.php
index 7b7b9558b04..7ad4f922600 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
@@ -58,7 +57,8 @@ class ManagerFactory implements ISystemTagManagerFactory {
*/
public function getManager() {
return new SystemTagManager(
- $this->serverContainer->getDatabaseConnection()
+ $this->serverContainer->getDatabaseConnection(),
+ $this->serverContainer->getEventDispatcher()
);
}
@@ -72,7 +72,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/systemtagmanager.php b/lib/private/systemtag/systemtagmanager.php
index af912a74936..76a60a91328 100644
--- a/lib/private/systemtag/systemtagmanager.php
+++ b/lib/private/systemtag/systemtagmanager.php
@@ -26,17 +26,20 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\ManagerEvent;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\SystemTag\TagNotFoundException;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class SystemTagManager implements ISystemTagManager {
const TAG_TABLE = 'systemtag';
- /**
- * @var IDBConnection
- */
- private $connection;
+ /** @var IDBConnection */
+ protected $connection;
+
+ /** @var EventDispatcherInterface */
+ protected $dispatcher;
/**
* Prepared query for selecting tags directly
@@ -46,12 +49,14 @@ class SystemTagManager implements ISystemTagManager {
private $selectTagQuery;
/**
- * Constructor.
- *
- * @param IDBConnection $connection database connection
- */
- public function __construct(IDBConnection $connection) {
+ * Constructor.
+ *
+ * @param IDBConnection $connection database connection
+ * @param EventDispatcherInterface $dispatcher
+ */
+ public function __construct(IDBConnection $connection, EventDispatcherInterface $dispatcher) {
$this->connection = $connection;
+ $this->dispatcher = $dispatcher;
$query = $this->connection->getQueryBuilder();
$this->selectTagQuery = $query->select('*')
@@ -190,14 +195,20 @@ class SystemTagManager implements ISystemTagManager {
);
}
- $tagId = $this->connection->lastInsertId('*PREFIX*' . self::TAG_TABLE);
+ $tagId = $query->getLastInsertId();
- return new SystemTag(
+ $tag = new SystemTag(
(int)$tagId,
$tagName,
(bool)$userVisible,
(bool)$userAssignable
);
+
+ $this->dispatcher->dispatch(ManagerEvent::EVENT_CREATE, new ManagerEvent(
+ ManagerEvent::EVENT_CREATE, $tag
+ ));
+
+ return $tag;
}
/**
@@ -207,6 +218,22 @@ class SystemTagManager implements ISystemTagManager {
$userVisible = (int)$userVisible;
$userAssignable = (int)$userAssignable;
+ try {
+ $tags = $this->getTagsByIds($tagId);
+ } catch (TagNotFoundException $e) {
+ throw new TagNotFoundException(
+ 'Tag does not exist', 0, null, [$tagId]
+ );
+ }
+
+ $beforeUpdate = array_shift($tags);
+ $afterUpdate = new SystemTag(
+ (int) $tagId,
+ $tagName,
+ (bool) $userVisible,
+ (bool) $userAssignable
+ );
+
$query = $this->connection->getQueryBuilder();
$query->update(self::TAG_TABLE)
->set('name', $query->createParameter('name'))
@@ -231,6 +258,10 @@ class SystemTagManager implements ISystemTagManager {
$e
);
}
+
+ $this->dispatcher->dispatch(ManagerEvent::EVENT_UPDATE, new ManagerEvent(
+ ManagerEvent::EVENT_UPDATE, $afterUpdate, $beforeUpdate
+ ));
}
/**
@@ -242,10 +273,21 @@ class SystemTagManager implements ISystemTagManager {
}
$tagNotFoundException = null;
+ $tags = [];
try {
- $this->getTagsByIds($tagIds);
+ $tags = $this->getTagsByIds($tagIds);
} catch (TagNotFoundException $e) {
$tagNotFoundException = $e;
+
+ // Get existing tag objects for the hooks later
+ $existingTags = array_diff($tagIds, $tagNotFoundException->getMissingTags());
+ if (!empty($existingTags)) {
+ try {
+ $tags = $this->getTagsByIds($existingTags);
+ } catch (TagNotFoundException $e) {
+ // Ignore further errors...
+ }
+ }
}
// delete relationships first
@@ -261,6 +303,12 @@ class SystemTagManager implements ISystemTagManager {
->setParameter('tagids', $tagIds, IQueryBuilder::PARAM_INT_ARRAY)
->execute();
+ foreach ($tags as $tag) {
+ $this->dispatcher->dispatch(ManagerEvent::EVENT_DELETE, new ManagerEvent(
+ ManagerEvent::EVENT_DELETE, $tag
+ ));
+ }
+
if ($tagNotFoundException !== null) {
throw new TagNotFoundException(
'Tag id(s) not found', 0, $tagNotFoundException, $tagNotFoundException->getMissingTags()
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
+ ));
}
/**