You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

466 lines
11 KiB

12 years ago
  1. <?php
  2. namespace OC;
  3. use OC\AppFramework\Http\Request;
  4. use OC\AppFramework\Db\Db;
  5. use OC\AppFramework\Utility\SimpleContainer;
  6. use OC\Cache\UserCache;
  7. use OC\DB\ConnectionWrapper;
  8. use OC\Files\Node\Root;
  9. use OC\Files\View;
  10. use OCP\IServerContainer;
  11. /**
  12. * Class Server
  13. *
  14. * @package OC
  15. *
  16. * TODO: hookup all manager classes
  17. */
  18. class Server extends SimpleContainer implements IServerContainer {
  19. function __construct() {
  20. $this->registerService('ContactsManager', function ($c) {
  21. return new ContactsManager();
  22. });
  23. $this->registerService('Request', function ($c) {
  24. if (isset($c['urlParams'])) {
  25. $urlParams = $c['urlParams'];
  26. } else {
  27. $urlParams = array();
  28. }
  29. if (\OC::$session->exists('requesttoken')) {
  30. $requestToken = \OC::$session->get('requesttoken');
  31. } else {
  32. $requestToken = false;
  33. }
  34. if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
  35. && in_array('fakeinput', stream_get_wrappers())
  36. ) {
  37. $stream = 'fakeinput://data';
  38. } else {
  39. $stream = 'php://input';
  40. }
  41. return new Request(
  42. array(
  43. 'get' => $_GET,
  44. 'post' => $_POST,
  45. 'files' => $_FILES,
  46. 'server' => $_SERVER,
  47. 'env' => $_ENV,
  48. 'cookies' => $_COOKIE,
  49. 'method' => (isset($_SERVER) && isset($_SERVER['REQUEST_METHOD']))
  50. ? $_SERVER['REQUEST_METHOD']
  51. : null,
  52. 'urlParams' => $urlParams,
  53. 'requesttoken' => $requestToken,
  54. ), $stream
  55. );
  56. });
  57. $this->registerService('PreviewManager', function ($c) {
  58. return new PreviewManager();
  59. });
  60. $this->registerService('TagManager', function ($c) {
  61. $user = \OC_User::getUser();
  62. return new TagManager($user);
  63. });
  64. $this->registerService('RootFolder', function ($c) {
  65. // TODO: get user and user manager from container as well
  66. $user = \OC_User::getUser();
  67. /** @var $c SimpleContainer */
  68. $userManager = $c->query('UserManager');
  69. $user = $userManager->get($user);
  70. $manager = \OC\Files\Filesystem::getMountManager();
  71. $view = new View();
  72. return new Root($manager, $view, $user);
  73. });
  74. $this->registerService('UserManager', function ($c) {
  75. /**
  76. * @var SimpleContainer $c
  77. * @var \OC\AllConfig $config
  78. */
  79. $config = $c->query('AllConfig');
  80. return new \OC\User\Manager($config);
  81. });
  82. $this->registerService('GroupManager', function ($c) {
  83. /**
  84. * @var SimpleContainer $c
  85. * @var \OC\User\Manager $userManager
  86. */
  87. $userManager = $c->query('UserManager');
  88. return new \OC\Group\Manager($userManager);
  89. });
  90. $this->registerService('UserSession', function ($c) {
  91. /**
  92. * @var SimpleContainer $c
  93. * @var \OC\User\Manager $manager
  94. */
  95. $manager = $c->query('UserManager');
  96. $userSession = new \OC\User\Session($manager, \OC::$session);
  97. $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) {
  98. \OC_Hook::emit('OC_User', 'pre_createUser', array('run' => true, 'uid' => $uid, 'password' => $password));
  99. });
  100. $userSession->listen('\OC\User', 'postCreateUser', function ($user, $password) {
  101. /** @var $user \OC\User\User */
  102. \OC_Hook::emit('OC_User', 'post_createUser', array('uid' => $user->getUID(), 'password' => $password));
  103. });
  104. $userSession->listen('\OC\User', 'preDelete', function ($user) {
  105. /** @var $user \OC\User\User */
  106. \OC_Hook::emit('OC_User', 'pre_deleteUser', array('run' => true, 'uid' => $user->getUID()));
  107. });
  108. $userSession->listen('\OC\User', 'postDelete', function ($user) {
  109. /** @var $user \OC\User\User */
  110. \OC_Hook::emit('OC_User', 'post_deleteUser', array('uid' => $user->getUID()));
  111. });
  112. $userSession->listen('\OC\User', 'preSetPassword', function ($user, $password, $recoveryPassword) {
  113. /** @var $user \OC\User\User */
  114. \OC_Hook::emit('OC_User', 'pre_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
  115. });
  116. $userSession->listen('\OC\User', 'postSetPassword', function ($user, $password, $recoveryPassword) {
  117. /** @var $user \OC\User\User */
  118. \OC_Hook::emit('OC_User', 'post_setPassword', array('run' => true, 'uid' => $user->getUID(), 'password' => $password, 'recoveryPassword' => $recoveryPassword));
  119. });
  120. $userSession->listen('\OC\User', 'preLogin', function ($uid, $password) {
  121. \OC_Hook::emit('OC_User', 'pre_login', array('run' => true, 'uid' => $uid, 'password' => $password));
  122. });
  123. $userSession->listen('\OC\User', 'postLogin', function ($user, $password) {
  124. /** @var $user \OC\User\User */
  125. \OC_Hook::emit('OC_User', 'post_login', array('run' => true, 'uid' => $user->getUID(), 'password' => $password));
  126. });
  127. $userSession->listen('\OC\User', 'logout', function () {
  128. \OC_Hook::emit('OC_User', 'logout', array());
  129. });
  130. return $userSession;
  131. });
  132. $this->registerService('NavigationManager', function ($c) {
  133. return new \OC\NavigationManager();
  134. });
  135. $this->registerService('AllConfig', function ($c) {
  136. return new \OC\AllConfig();
  137. });
  138. $this->registerService('AppConfig', function ($c) {
  139. return new \OC\AppConfig(\OC_DB::getConnection());
  140. });
  141. $this->registerService('L10NFactory', function ($c) {
  142. return new \OC\L10N\Factory();
  143. });
  144. $this->registerService('URLGenerator', function ($c) {
  145. /** @var $c SimpleContainer */
  146. $config = $c->query('AllConfig');
  147. return new \OC\URLGenerator($config);
  148. });
  149. $this->registerService('AppHelper', function ($c) {
  150. return new \OC\AppHelper();
  151. });
  152. $this->registerService('UserCache', function ($c) {
  153. return new UserCache();
  154. });
  155. $this->registerService('MemCacheFactory', function ($c) {
  156. $instanceId = \OC_Util::getInstanceId();
  157. return new \OC\Memcache\Factory($instanceId);
  158. });
  159. $this->registerService('ActivityManager', function ($c) {
  160. return new ActivityManager();
  161. });
  162. $this->registerService('AvatarManager', function ($c) {
  163. return new AvatarManager();
  164. });
  165. $this->registerService('Logger', function ($c) {
  166. /** @var $c SimpleContainer */
  167. $logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud');
  168. $logger = 'OC_Log_' . ucfirst($logClass);
  169. call_user_func(array($logger, 'init'));
  170. return new Log($logger);
  171. });
  172. $this->registerService('JobList', function ($c) {
  173. /**
  174. * @var Server $c
  175. */
  176. $config = $c->getConfig();
  177. return new \OC\BackgroundJob\JobList($c->getDatabaseConnection(), $config);
  178. });
  179. $this->registerService('Router', function ($c) {
  180. /**
  181. * @var Server $c
  182. */
  183. $cacheFactory = $c->getMemCacheFactory();
  184. if ($cacheFactory->isAvailable()) {
  185. $router = new \OC\Route\CachingRouter($cacheFactory->create('route'));
  186. } else {
  187. $router = new \OC\Route\Router();
  188. }
  189. return $router;
  190. });
  191. $this->registerService('Search', function ($c) {
  192. return new Search();
  193. });
  194. $this->registerService('Db', function ($c) {
  195. return new Db();
  196. });
  197. }
  198. /**
  199. * @return \OCP\Contacts\IManager
  200. */
  201. function getContactsManager() {
  202. return $this->query('ContactsManager');
  203. }
  204. /**
  205. * The current request object holding all information about the request
  206. * currently being processed is returned from this method.
  207. * In case the current execution was not initiated by a web request null is returned
  208. *
  209. * @return \OCP\IRequest|null
  210. */
  211. function getRequest() {
  212. return $this->query('Request');
  213. }
  214. /**
  215. * Returns the preview manager which can create preview images for a given file
  216. *
  217. * @return \OCP\IPreview
  218. */
  219. function getPreviewManager() {
  220. return $this->query('PreviewManager');
  221. }
  222. /**
  223. * Returns the tag manager which can get and set tags for different object types
  224. *
  225. * @see \OCP\ITagManager::load()
  226. * @return \OCP\ITagManager
  227. */
  228. function getTagManager() {
  229. return $this->query('TagManager');
  230. }
  231. /**
  232. * Returns the avatar manager, used for avatar functionality
  233. *
  234. * @return \OCP\IAvatarManager
  235. */
  236. function getAvatarManager() {
  237. return $this->query('AvatarManager');
  238. }
  239. /**
  240. * Returns the root folder of ownCloud's data directory
  241. *
  242. * @return \OCP\Files\Folder
  243. */
  244. function getRootFolder() {
  245. return $this->query('RootFolder');
  246. }
  247. /**
  248. * Returns a view to ownCloud's files folder
  249. *
  250. * @return \OCP\Files\Folder
  251. */
  252. function getUserFolder() {
  253. $user = $this->getUserSession()->getUser();
  254. if (!$user) {
  255. return null;
  256. }
  257. $dir = '/' . $user->getUID();
  258. $root = $this->getRootFolder();
  259. $folder = null;
  260. if (!$root->nodeExists($dir)) {
  261. $folder = $root->newFolder($dir);
  262. } else {
  263. $folder = $root->get($dir);
  264. }
  265. $dir = '/files';
  266. if (!$folder->nodeExists($dir)) {
  267. $folder = $folder->newFolder($dir);
  268. } else {
  269. $folder = $folder->get($dir);
  270. }
  271. return $folder;
  272. }
  273. /**
  274. * Returns an app-specific view in ownClouds data directory
  275. *
  276. * @return \OCP\Files\Folder
  277. */
  278. function getAppFolder() {
  279. $dir = '/' . \OC_App::getCurrentApp();
  280. $root = $this->getRootFolder();
  281. $folder = null;
  282. if (!$root->nodeExists($dir)) {
  283. $folder = $root->newFolder($dir);
  284. } else {
  285. $folder = $root->get($dir);
  286. }
  287. return $folder;
  288. }
  289. /**
  290. * @return \OC\User\Manager
  291. */
  292. function getUserManager() {
  293. return $this->query('UserManager');
  294. }
  295. /**
  296. * @return \OC\Group\Manager
  297. */
  298. function getGroupManager() {
  299. return $this->query('GroupManager');
  300. }
  301. /**
  302. * @return \OC\User\Session
  303. */
  304. function getUserSession() {
  305. return $this->query('UserSession');
  306. }
  307. /**
  308. * @return \OC\NavigationManager
  309. */
  310. function getNavigationManager() {
  311. return $this->query('NavigationManager');
  312. }
  313. /**
  314. * @return \OCP\IConfig
  315. */
  316. function getConfig() {
  317. return $this->query('AllConfig');
  318. }
  319. /**
  320. * Returns the app config manager
  321. *
  322. * @return \OCP\IAppConfig
  323. */
  324. function getAppConfig() {
  325. return $this->query('AppConfig');
  326. }
  327. /**
  328. * get an L10N instance
  329. *
  330. * @param string $app appid
  331. * @return \OC_L10N
  332. */
  333. function getL10N($app) {
  334. return $this->query('L10NFactory')->get($app);
  335. }
  336. /**
  337. * @return \OCP\IURLGenerator
  338. */
  339. function getURLGenerator() {
  340. return $this->query('URLGenerator');
  341. }
  342. /**
  343. * @return \OCP\IHelper
  344. */
  345. function getHelper() {
  346. return $this->query('AppHelper');
  347. }
  348. /**
  349. * Returns an ICache instance
  350. *
  351. * @return \OCP\ICache
  352. */
  353. function getCache() {
  354. return $this->query('UserCache');
  355. }
  356. /**
  357. * Returns an \OCP\CacheFactory instance
  358. *
  359. * @return \OCP\ICacheFactory
  360. */
  361. function getMemCacheFactory() {
  362. return $this->query('MemCacheFactory');
  363. }
  364. /**
  365. * Returns the current session
  366. *
  367. * @return \OCP\ISession
  368. */
  369. function getSession() {
  370. return \OC::$session;
  371. }
  372. /**
  373. * Returns the current session
  374. *
  375. * @return \OCP\IDBConnection
  376. */
  377. function getDatabaseConnection() {
  378. return new ConnectionWrapper(\OC_DB::getConnection());
  379. }
  380. /**
  381. * Returns the activity manager
  382. *
  383. * @return \OCP\Activity\IManager
  384. */
  385. function getActivityManager() {
  386. return $this->query('ActivityManager');
  387. }
  388. /**
  389. * Returns an job list for controlling background jobs
  390. *
  391. * @return \OCP\BackgroundJob\IJobList
  392. */
  393. function getJobList() {
  394. return $this->query('JobList');
  395. }
  396. /**
  397. * Returns a logger instance
  398. *
  399. * @return \OCP\ILogger
  400. */
  401. function getLogger() {
  402. return $this->query('Logger');
  403. }
  404. /**
  405. * Returns a router for generating and matching urls
  406. *
  407. * @return \OCP\Route\IRouter
  408. */
  409. function getRouter() {
  410. return $this->query('Router');
  411. }
  412. /**
  413. * Returns a search instance
  414. *
  415. * @return \OCP\ISearch
  416. */
  417. function getSearch() {
  418. return $this->query('Search');
  419. }
  420. /**
  421. * Returns an instance of the db facade
  422. *
  423. * @return \OCP\IDb
  424. */
  425. function getDb() {
  426. return $this->query('Db');
  427. }
  428. }