summaryrefslogtreecommitdiffstats
path: root/lib/private/server.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/server.php')
-rw-r--r--lib/private/server.php103
1 files changed, 96 insertions, 7 deletions
diff --git a/lib/private/server.php b/lib/private/server.php
index 7bd7f8ca45d..94444623cfb 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -2,6 +2,7 @@
namespace OC;
+use bantu\IniGetWrapper\IniGetWrapper;
use OC\AppFramework\Http\Request;
use OC\AppFramework\Db\Db;
use OC\AppFramework\Utility\SimpleContainer;
@@ -9,8 +10,8 @@ use OC\Cache\UserCache;
use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\QueryLogger;
+use OC\Files\Config\StorageManager;
use OC\Security\CertificateManager;
-use OC\DB\ConnectionWrapper;
use OC\Files\Node\Root;
use OC\Files\View;
use OC\Security\Crypto;
@@ -104,8 +105,26 @@ class Server extends SimpleContainer implements IServerContainer {
return new \OC\User\Manager($config);
});
$this->registerService('GroupManager', function (Server $c) {
- $userManager = $c->getUserManager();
- return new \OC\Group\Manager($userManager);
+ $groupManager = new \OC\Group\Manager($this->getUserManager());
+ $groupManager->listen('\OC\Group', 'preCreate', function ($gid) {
+ \OC_Hook::emit('OC_Group', 'pre_createGroup', array('run' => true, 'gid' => $gid));
+ });
+ $groupManager->listen('\OC\Group', 'postCreate', function (\OC\Group\Group $gid) {
+ \OC_Hook::emit('OC_User', 'post_createGroup', array('gid' => $gid->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'preDelete', function (\OC\Group\Group $group) {
+ \OC_Hook::emit('OC_Group', 'pre_deleteGroup', array('run' => true, 'gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'postDelete', function (\OC\Group\Group $group) {
+ \OC_Hook::emit('OC_User', 'post_deleteGroup', array('gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'preAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
+ \OC_Hook::emit('OC_Group', 'pre_addToGroup', array('run' => true, 'uid' => $user->getUID(), 'gid' => $group->getGID()));
+ });
+ $groupManager->listen('\OC\Group', 'postAddUser', function (\OC\Group\Group $group, \OC\User\User $user) {
+ \OC_Hook::emit('OC_Group', 'post_addToGroup', array('uid' => $user->getUID(), 'gid' => $group->getGID()));
+ });
+ return $groupManager;
});
$this->registerService('UserSession', function (Server $c) {
$manager = $c->getUserManager();
@@ -148,8 +167,13 @@ class Server extends SimpleContainer implements IServerContainer {
$this->registerService('NavigationManager', function ($c) {
return new \OC\NavigationManager();
});
- $this->registerService('AllConfig', function ($c) {
- return new \OC\AllConfig();
+ $this->registerService('AllConfig', function (Server $c) {
+ return new \OC\AllConfig(
+ $c->getSystemConfig()
+ );
+ });
+ $this->registerService('SystemConfig', function ($c) {
+ return new \OC\SystemConfig();
});
$this->registerService('AppConfig', function ($c) {
return new \OC\AppConfig(\OC_DB::getConnection());
@@ -211,11 +235,12 @@ class Server extends SimpleContainer implements IServerContainer {
});
$this->registerService('DatabaseConnection', function (Server $c) {
$factory = new \OC\DB\ConnectionFactory();
- $type = $c->getConfig()->getSystemValue('dbtype', 'sqlite');
+ $systemConfig = $c->getSystemConfig();
+ $type = $systemConfig->getValue('dbtype', 'sqlite');
if (!$factory->isValidType($type)) {
throw new \OC\DatabaseException('Invalid database type');
}
- $connectionParams = $factory->createConnectionParams($c->getConfig());
+ $connectionParams = $factory->createConnectionParams($systemConfig);
$connection = $factory->getConnection($type, $connectionParams);
$connection->getConfiguration()->setSQLLogger($c->getQueryLogger());
return $connection;
@@ -250,6 +275,19 @@ class Server extends SimpleContainer implements IServerContainer {
$groupManager = $c->getGroupManager();
return new \OC\App\AppManager($userSession, $appConfig, $groupManager);
});
+ $this->registerService('DateTimeFormatter', function(Server $c) {
+ $timeZone = $c->getTimeZone();
+ $language = $c->getConfig()->getUserValue($c->getSession()->get('user_id'), 'core', 'lang', null);
+
+ return new \OC\DateTimeFormatter($timeZone, $c->getL10N('lib', $language));
+ });
+ $this->registerService('MountConfigManager', function () {
+ $loader = \OC\Files\Filesystem::getLoader();
+ return new \OC\Files\Config\MountProviderCollection($loader);
+ });
+ $this->registerService('IniWrapper', function ($c) {
+ return new IniGetWrapper();
+ });
}
/**
@@ -323,6 +361,7 @@ class Server extends SimpleContainer implements IServerContainer {
} else {
$user = $this->getUserManager()->get($userId);
}
+ \OC\Files\Filesystem::initMountPoints($userId);
$dir = '/' . $userId;
$root = $this->getRootFolder();
$folder = null;
@@ -423,6 +462,15 @@ class Server extends SimpleContainer implements IServerContainer {
}
/**
+ * For internal use only
+ *
+ * @return \OC\SystemConfig
+ */
+ function getSystemConfig() {
+ return $this->query('SystemConfig');
+ }
+
+ /**
* Returns the app config manager
*
* @return \OCP\IAppConfig
@@ -647,4 +695,45 @@ class Server extends SimpleContainer implements IServerContainer {
function getWebRoot() {
return $this->webRoot;
}
+
+ /**
+ * Get the timezone of the current user, based on his session information and config data
+ *
+ * @return \DateTimeZone
+ */
+ public function getTimeZone() {
+ $timeZone = $this->getConfig()->getUserValue($this->getSession()->get('user_id'), 'core', 'timezone', null);
+ if ($timeZone === null) {
+ if ($this->getSession()->exists('timezone')) {
+ $offsetHours = $this->getSession()->get('timezone');
+ // Note: the timeZone name is the inverse to the offset,
+ // so a positive offset means negative timeZone
+ // and the other way around.
+ if ($offsetHours > 0) {
+ return new \DateTimeZone('Etc/GMT-' . $offsetHours);
+ } else {
+ return new \DateTimeZone('Etc/GMT+' . abs($offsetHours));
+ }
+ } else {
+ return new \DateTimeZone('UTC');
+ }
+ }
+ return new \DateTimeZone($timeZone);
+ }
+
+ /**
+ * @return \OCP\Files\Config\IMountProviderCollection
+ */
+ function getMountProviderCollection(){
+ return $this->query('MountConfigManager');
+ }
+
+ /**
+ * Get the IniWrapper
+ *
+ * @return IniGetWrapper
+ */
+ public function getIniWrapper() {
+ return $this->query('IniWrapper');
+ }
}