Merge pull request #21792 from owncloud/systemtags-managerfactory
Allow custom implementation of system tag managers
This commit is contained in:
commit
7c7467fe42
|
@ -818,6 +818,13 @@ $CONFIG = array(
|
||||||
*/
|
*/
|
||||||
'comments.managerFactory' => '\OC\Comments\ManagerFactory',
|
'comments.managerFactory' => '\OC\Comments\ManagerFactory',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces the default System Tags Manager Factory. This can be utilized if an
|
||||||
|
* own or 3rdParty SystemTagsManager should be used that – for instance – uses the
|
||||||
|
* filesystem instead of the database to keep the comments.
|
||||||
|
*/
|
||||||
|
'systemtags.managerFactory' => '\OC\SystemTag\ManagerFactory',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maintenance
|
* Maintenance
|
||||||
*
|
*
|
||||||
|
|
|
@ -22,10 +22,26 @@ namespace OC\Comments;
|
||||||
|
|
||||||
use OCP\Comments\ICommentsManager;
|
use OCP\Comments\ICommentsManager;
|
||||||
use OCP\Comments\ICommentsManagerFactory;
|
use OCP\Comments\ICommentsManagerFactory;
|
||||||
|
use OCP\IServerContainer;
|
||||||
|
|
||||||
class ManagerFactory implements ICommentsManagerFactory {
|
class ManagerFactory implements ICommentsManagerFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Server container
|
||||||
|
*
|
||||||
|
* @var IServerContainer
|
||||||
|
*/
|
||||||
|
private $serverContainer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for the comments manager factory
|
||||||
|
*
|
||||||
|
* @param IServerContainer $serverContainer server container
|
||||||
|
*/
|
||||||
|
public function __construct(IServerContainer $serverContainer) {
|
||||||
|
$this->serverContainer = $serverContainer;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates and returns an instance of the ICommentsManager
|
* creates and returns an instance of the ICommentsManager
|
||||||
*
|
*
|
||||||
|
@ -34,8 +50,8 @@ class ManagerFactory implements ICommentsManagerFactory {
|
||||||
*/
|
*/
|
||||||
public function getManager() {
|
public function getManager() {
|
||||||
return new Manager(
|
return new Manager(
|
||||||
\OC::$server->getDatabaseConnection(),
|
$this->serverContainer->getDatabaseConnection(),
|
||||||
\OC::$server->getLogger()
|
$this->serverContainer->getLogger()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,11 +143,18 @@ class Server extends ServerContainer implements IServerContainer {
|
||||||
$tagMapper = $c->query('TagMapper');
|
$tagMapper = $c->query('TagMapper');
|
||||||
return new TagManager($tagMapper, $c->getUserSession());
|
return new TagManager($tagMapper, $c->getUserSession());
|
||||||
});
|
});
|
||||||
|
$this->registerService('SystemTagManagerFactory', function (Server $c) {
|
||||||
|
$config = $c->getConfig();
|
||||||
|
$factoryClass = $config->getSystemValue('systemtags.managerFactory', '\OC\SystemTag\ManagerFactory');
|
||||||
|
/** @var \OC\SystemTag\ManagerFactory $factory */
|
||||||
|
$factory = new $factoryClass($this);
|
||||||
|
return $factory;
|
||||||
|
});
|
||||||
$this->registerService('SystemTagManager', function (Server $c) {
|
$this->registerService('SystemTagManager', function (Server $c) {
|
||||||
return new SystemTag\SystemTagManager($c->getDatabaseConnection());
|
return $c->query('SystemTagManagerFactory')->getManager();
|
||||||
});
|
});
|
||||||
$this->registerService('SystemTagObjectMapper', function (Server $c) {
|
$this->registerService('SystemTagObjectMapper', function (Server $c) {
|
||||||
return new SystemTag\SystemTagObjectMapper($c->getDatabaseConnection(), $c->getSystemTagManager());
|
return $c->query('SystemTagManagerFactory')->getObjectMapper();
|
||||||
});
|
});
|
||||||
$this->registerService('RootFolder', function (Server $c) {
|
$this->registerService('RootFolder', function (Server $c) {
|
||||||
// TODO: get user and user manager from container as well
|
// TODO: get user and user manager from container as well
|
||||||
|
@ -537,7 +544,7 @@ class Server extends ServerContainer implements IServerContainer {
|
||||||
$config = $c->getConfig();
|
$config = $c->getConfig();
|
||||||
$factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory');
|
$factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory');
|
||||||
/** @var \OCP\Comments\ICommentsManagerFactory $factory */
|
/** @var \OCP\Comments\ICommentsManagerFactory $factory */
|
||||||
$factory = new $factoryClass();
|
$factory = new $factoryClass($this);
|
||||||
return $factory->getManager();
|
return $factory->getManager();
|
||||||
});
|
});
|
||||||
$this->registerService('EventDispatcher', function() {
|
$this->registerService('EventDispatcher', function() {
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @author Vincent Petry <pvince81@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 OC\SystemTag;
|
||||||
|
|
||||||
|
use OCP\SystemTag\ISystemTagManagerFactory;
|
||||||
|
use OCP\SystemTag\ISystemTagManager;
|
||||||
|
use OC\SystemTag\SystemTagManager;
|
||||||
|
use OC\SystemTag\SystemTagObjectMapper;
|
||||||
|
use OCP\IServerContainer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default factory class for system tag managers
|
||||||
|
*
|
||||||
|
* @package OCP\SystemTag
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
class ManagerFactory implements ISystemTagManagerFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Server container
|
||||||
|
*
|
||||||
|
* @var IServerContainer
|
||||||
|
*/
|
||||||
|
private $serverContainer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for the system tag manager factory
|
||||||
|
*
|
||||||
|
* @param IServerContainer $serverContainer server container
|
||||||
|
*/
|
||||||
|
public function __construct(IServerContainer $serverContainer) {
|
||||||
|
$this->serverContainer = $serverContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns an instance of the system tag manager
|
||||||
|
*
|
||||||
|
* @return ISystemTagManager
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function getManager() {
|
||||||
|
return new SystemTagManager(
|
||||||
|
$this->serverContainer->getDatabaseConnection()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates and returns an instance of the system tag object
|
||||||
|
* mapper
|
||||||
|
*
|
||||||
|
* @return ISystemTagObjectMapper
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function getObjectMapper() {
|
||||||
|
return new SystemTagObjectMapper(
|
||||||
|
$this->serverContainer->getDatabaseConnection(),
|
||||||
|
$this->getManager()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,6 +20,8 @@
|
||||||
*/
|
*/
|
||||||
namespace OCP\Comments;
|
namespace OCP\Comments;
|
||||||
|
|
||||||
|
use OCP\IServerContainer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface ICommentsManagerFactory
|
* Interface ICommentsManagerFactory
|
||||||
*
|
*
|
||||||
|
@ -31,6 +33,14 @@ namespace OCP\Comments;
|
||||||
*/
|
*/
|
||||||
interface ICommentsManagerFactory {
|
interface ICommentsManagerFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for the comments manager factory
|
||||||
|
*
|
||||||
|
* @param IServerContainer $serverContainer server container
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function __construct(IServerContainer $serverContainer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* creates and returns an instance of the ICommentsManager
|
* creates and returns an instance of the ICommentsManager
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @author Vincent Petry <pvince81@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 OCP\IServerContainer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface ISystemTagManagerFactory
|
||||||
|
*
|
||||||
|
* Factory interface for system tag managers
|
||||||
|
*
|
||||||
|
* @package OCP\SystemTag
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
interface ISystemTagManagerFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for the system tag manager factory
|
||||||
|
*
|
||||||
|
* @param IServerContainer $serverContainer server container
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function __construct(IServerContainer $serverContainer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates and returns an instance of the system tag manager
|
||||||
|
*
|
||||||
|
* @return ISystemTagManager
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function getManager();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* creates and returns an instance of the system tag object
|
||||||
|
* mapper
|
||||||
|
*
|
||||||
|
* @return ISystemTagObjectMapper
|
||||||
|
* @since 9.0.0
|
||||||
|
*/
|
||||||
|
public function getObjectMapper();
|
||||||
|
}
|
|
@ -2,11 +2,16 @@
|
||||||
|
|
||||||
namespace Test\Comments;
|
namespace Test\Comments;
|
||||||
|
|
||||||
|
use OCP\IServerContainer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class FakeFactory
|
* Class FakeFactory
|
||||||
*/
|
*/
|
||||||
class FakeFactory implements \OCP\Comments\ICommentsManagerFactory {
|
class FakeFactory implements \OCP\Comments\ICommentsManagerFactory {
|
||||||
|
|
||||||
|
public function __construct(IServerContainer $serverContainer) {
|
||||||
|
}
|
||||||
|
|
||||||
public function getManager() {
|
public function getManager() {
|
||||||
return new FakeManager();
|
return new FakeManager();
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ class Test_Comments_Manager extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getManager() {
|
protected function getManager() {
|
||||||
$factory = new \OC\Comments\ManagerFactory();
|
$factory = new \OC\Comments\ManagerFactory(\OC::$server);
|
||||||
return $factory->getManager();
|
return $factory->getManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,9 @@ class Server extends \Test\TestCase {
|
||||||
['TempManager', '\OC\TempManager'],
|
['TempManager', '\OC\TempManager'],
|
||||||
['TempManager', '\OCP\ITempManager'],
|
['TempManager', '\OCP\ITempManager'],
|
||||||
['TrustedDomainHelper', '\OC\Security\TrustedDomainHelper'],
|
['TrustedDomainHelper', '\OC\Security\TrustedDomainHelper'],
|
||||||
|
|
||||||
|
['SystemTagManager', '\OCP\SystemTag\ISystemTagManager'],
|
||||||
|
['SystemTagObjectMapper', '\OCP\SystemTag\ISystemTagObjectMapper'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue