diff options
Diffstat (limited to 'lib/private/server.php')
-rw-r--r-- | lib/private/server.php | 103 |
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'); + } } |