Added config.php option to replace the default implementation of system tag manager and system tag object mapper. Also adjusted the comments manager factory to inject the server containertags/v9.0beta1
@@ -818,6 +818,13 @@ $CONFIG = array( | |||
*/ | |||
'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 | |||
* |
@@ -22,10 +22,26 @@ namespace OC\Comments; | |||
use OCP\Comments\ICommentsManager; | |||
use OCP\Comments\ICommentsManagerFactory; | |||
use OCP\IServerContainer; | |||
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 | |||
* | |||
@@ -34,8 +50,8 @@ class ManagerFactory implements ICommentsManagerFactory { | |||
*/ | |||
public function getManager() { | |||
return new Manager( | |||
\OC::$server->getDatabaseConnection(), | |||
\OC::$server->getLogger() | |||
$this->serverContainer->getDatabaseConnection(), | |||
$this->serverContainer->getLogger() | |||
); | |||
} | |||
} |
@@ -143,11 +143,18 @@ class Server extends ServerContainer implements IServerContainer { | |||
$tagMapper = $c->query('TagMapper'); | |||
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) { | |||
return new SystemTag\SystemTagManager($c->getDatabaseConnection()); | |||
return $c->query('SystemTagManagerFactory')->getManager(); | |||
}); | |||
$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) { | |||
// TODO: get user and user manager from container as well | |||
@@ -533,7 +540,7 @@ class Server extends ServerContainer implements IServerContainer { | |||
$config = $c->getConfig(); | |||
$factoryClass = $config->getSystemValue('comments.managerFactory', '\OC\Comments\ManagerFactory'); | |||
/** @var \OCP\Comments\ICommentsManagerFactory $factory */ | |||
$factory = new $factoryClass(); | |||
$factory = new $factoryClass($this); | |||
return $factory->getManager(); | |||
}); | |||
$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; | |||
use OCP\IServerContainer; | |||
/** | |||
* Interface ICommentsManagerFactory | |||
* | |||
@@ -31,6 +33,14 @@ namespace OCP\Comments; | |||
*/ | |||
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 | |||
* |
@@ -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; | |||
use OCP\IServerContainer; | |||
/** | |||
* Class FakeFactory | |||
*/ | |||
class FakeFactory implements \OCP\Comments\ICommentsManagerFactory { | |||
public function __construct(IServerContainer $serverContainer) { | |||
} | |||
public function getManager() { | |||
return new FakeManager(); | |||
} |
@@ -50,7 +50,7 @@ class Test_Comments_Manager extends TestCase | |||
} | |||
protected function getManager() { | |||
$factory = new \OC\Comments\ManagerFactory(); | |||
$factory = new \OC\Comments\ManagerFactory(\OC::$server); | |||
return $factory->getManager(); | |||
} | |||
@@ -155,6 +155,9 @@ class Server extends \Test\TestCase { | |||
['TempManager', '\OC\TempManager'], | |||
['TempManager', '\OCP\ITempManager'], | |||
['TrustedDomainHelper', '\OC\Security\TrustedDomainHelper'], | |||
['SystemTagManager', '\OCP\SystemTag\ISystemTagManager'], | |||
['SystemTagObjectMapper', '\OCP\SystemTag\ISystemTagObjectMapper'], | |||
]; | |||
} | |||