summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/appinfo/app.php4
-rw-r--r--apps/files/appinfo/routes.php7
-rw-r--r--apps/files/controller/viewcontroller.php224
-rw-r--r--apps/files/index.php161
-rw-r--r--apps/files/tests/controller/ViewControllerTest.php250
-rw-r--r--lib/private/appframework/dependencyinjection/dicontainer.php4
-rw-r--r--tests/lib/helper.php28
-rw-r--r--tests/lib/urlgenerator.php10
8 files changed, 511 insertions, 177 deletions
diff --git a/apps/files/appinfo/app.php b/apps/files/appinfo/app.php
index 40b194ab882..c752b5e7d72 100644
--- a/apps/files/appinfo/app.php
+++ b/apps/files/appinfo/app.php
@@ -25,12 +25,14 @@
*/
\OCP\App::registerAdmin('files', 'admin');
+
\OC::$server->getNavigationManager()->add(function () {
+ $urlGenerator = \OC::$server->getURLGenerator();
$l = \OC::$server->getL10N('files');
return [
'id' => 'files_index',
'order' => 0,
- 'href' => \OCP\Util::linkTo('files', 'index.php'),
+ 'href' => $urlGenerator->linkToRoute('files.view.index'),
'icon' => \OCP\Util::imagePath('core', 'places/files.svg'),
'name' => $l->t('Files'),
];
diff --git a/apps/files/appinfo/routes.php b/apps/files/appinfo/routes.php
index d52dfaab21c..2bb913c30a6 100644
--- a/apps/files/appinfo/routes.php
+++ b/apps/files/appinfo/routes.php
@@ -48,14 +48,17 @@ $application->registerRoutes(
'verb' => 'GET',
'requirements' => array('tagName' => '.+'),
),
+ [
+ 'name' => 'view#index',
+ 'url' => '/',
+ 'verb' => 'GET',
+ ],
)
)
);
/** @var $this \OC\Route\Router */
-$this->create('files_index', '/')
- ->actionInclude('files/index.php');
$this->create('files_ajax_delete', 'ajax/delete.php')
->actionInclude('files/ajax/delete.php');
$this->create('files_ajax_download', 'ajax/download.php')
diff --git a/apps/files/controller/viewcontroller.php b/apps/files/controller/viewcontroller.php
new file mode 100644
index 00000000000..c274680e525
--- /dev/null
+++ b/apps/files/controller/viewcontroller.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, 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 OCA\Files\Controller;
+
+use OC\AppFramework\Http\Request;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\IL10N;
+use OCP\INavigationManager;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\IConfig;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+
+/**
+ * Class ViewController
+ *
+ * @package OCA\Files\Controller
+ */
+class ViewController extends Controller {
+ /** @var string */
+ protected $appName;
+ /** @var IRequest */
+ protected $request;
+ /** @var IURLGenerator */
+ protected $urlGenerator;
+ /** @var INavigationManager */
+ protected $navigationManager;
+ /** @var IL10N */
+ protected $l10n;
+ /** @var IConfig */
+ protected $config;
+ /** @var EventDispatcherInterface */
+ protected $eventDispatcher;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IURLGenerator $urlGenerator
+ * @param INavigationManager $navigationManager
+ * @param IL10N $l10n
+ * @param IConfig $config
+ * @param EventDispatcherInterface $eventDispatcherInterface
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IURLGenerator $urlGenerator,
+ INavigationManager $navigationManager,
+ IL10N $l10n,
+ IConfig $config,
+ EventDispatcherInterface $eventDispatcherInterface) {
+ parent::__construct($appName, $request);
+ $this->appName = $appName;
+ $this->request = $request;
+ $this->urlGenerator = $urlGenerator;
+ $this->navigationManager = $navigationManager;
+ $this->l10n = $l10n;
+ $this->config = $config;
+ $this->eventDispatcher = $eventDispatcherInterface;
+ }
+
+ /**
+ * @param string $appName
+ * @param string $scriptName
+ * @return string
+ */
+ protected function renderScript($appName, $scriptName) {
+ $content = '';
+ $appPath = \OC_App::getAppPath($appName);
+ $scriptPath = $appPath . '/' . $scriptName;
+ if (file_exists($scriptPath)) {
+ // TODO: sanitize path / script name ?
+ ob_start();
+ include $scriptPath;
+ $content = ob_get_contents();
+ @ob_end_clean();
+ }
+ return $content;
+ }
+
+ /**
+ * FIXME: Replace with non static code
+ *
+ * @return array
+ * @throws \OCP\Files\NotFoundException
+ */
+ protected function getStorageInfo() {
+ $dirInfo = \OC\Files\Filesystem::getFileInfo('/', false);
+ return \OC_Helper::getStorageInfo('/', $dirInfo);
+ }
+
+ /**
+ * @NoCSRFRequired
+ * @NoAdminRequired
+ *
+ * @param string $dir
+ * @param string $view
+ * @return TemplateResponse
+ * @throws \OCP\Files\NotFoundException
+ */
+ public function index($dir = '', $view = '') {
+ // Load the files we need
+ \OCP\Util::addStyle('files', 'files');
+ \OCP\Util::addStyle('files', 'upload');
+ \OCP\Util::addStyle('files', 'mobile');
+ \OCP\Util::addscript('files', 'app');
+ \OCP\Util::addscript('files', 'file-upload');
+ \OCP\Util::addscript('files', 'newfilemenu');
+ \OCP\Util::addscript('files', 'jquery.iframe-transport');
+ \OCP\Util::addscript('files', 'jquery.fileupload');
+ \OCP\Util::addscript('files', 'jquery-visibility');
+ \OCP\Util::addscript('files', 'fileinfomodel');
+ \OCP\Util::addscript('files', 'filesummary');
+ \OCP\Util::addscript('files', 'breadcrumb');
+ \OCP\Util::addscript('files', 'filelist');
+ \OCP\Util::addscript('files', 'search');
+
+ \OCP\Util::addScript('files', 'favoritesfilelist');
+ \OCP\Util::addScript('files', 'tagsplugin');
+ \OCP\Util::addScript('files', 'favoritesplugin');
+
+ \OCP\Util::addScript('files', 'detailfileinfoview');
+ \OCP\Util::addScript('files', 'detailtabview');
+ \OCP\Util::addScript('files', 'mainfileinfodetailview');
+ \OCP\Util::addScript('files', 'detailsview');
+ \OCP\Util::addStyle('files', 'detailsView');
+
+ \OC_Util::addVendorScript('core', 'handlebars/handlebars');
+
+ \OCP\Util::addscript('files', 'fileactions');
+ \OCP\Util::addscript('files', 'fileactionsmenu');
+ \OCP\Util::addscript('files', 'files');
+ \OCP\Util::addscript('files', 'keyboardshortcuts');
+ \OCP\Util::addscript('files', 'navigation');
+
+ // if IE8 and "?dir=path&view=someview" was specified, reformat the URL to use a hash like "#?dir=path&view=someview"
+ $isIE8 = $this->request->isUserAgent([Request::USER_AGENT_IE_8]);
+ if ($isIE8 && ($dir !== '' || $view !== '')) {
+ $dir = !empty($dir) ? $dir : '/';
+ $view = !empty($view) ? $view : 'files';
+ $hash = '#?dir=' . \OCP\Util::encodePath($dir);
+ if ($view !== 'files') {
+ $hash .= '&view=' . urlencode($view);
+ }
+ return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index') . $hash);
+ }
+
+ // mostly for the home storage's free space
+ // FIXME: Make non static
+ $storageInfo = $this->getStorageInfo();
+
+ $nav = new \OCP\Template('files', 'appnavigation', '');
+
+ \OCA\Files\App::getNavigationManager()->add(
+ [
+ 'id' => 'favorites',
+ 'appname' => 'files',
+ 'script' => 'simplelist.php',
+ 'order' => 5,
+ 'name' => $this->l10n->t('Favorites')
+ ]
+ );
+
+ $navItems = \OCA\Files\App::getNavigationManager()->getAll();
+ usort($navItems, function($item1, $item2) {
+ return $item1['order'] - $item2['order'];
+ });
+ $nav->assign('navigationItems', $navItems);
+
+ $contentItems = [];
+
+ // render the container content for every navigation item
+ foreach ($navItems as $item) {
+ $content = '';
+ if (isset($item['script'])) {
+ $content = $this->renderScript($item['appname'], $item['script']);
+ }
+ $contentItem = [];
+ $contentItem['id'] = $item['id'];
+ $contentItem['content'] = $content;
+ $contentItems[] = $contentItem;
+ }
+
+ $this->eventDispatcher->dispatch('OCA\Files::loadAdditionalScripts');
+
+ $params = [];
+ $params['usedSpacePercent'] = (int)$storageInfo['relative'];
+ $params['owner'] = $storageInfo['owner'];
+ $params['ownerDisplayName'] = $storageInfo['ownerDisplayName'];
+ $params['isPublic'] = false;
+ $params['mailNotificationEnabled'] = $this->config->getAppValue('core', 'shareapi_allow_mail_notification', 'no');
+ $params['mailPublicNotificationEnabled'] = $this->config->getAppValue('core', 'shareapi_allow_public_notification', 'no');
+ $params['allowShareWithLink'] = $this->config->getAppValue('core', 'shareapi_allow_links', 'yes');
+ $params['appNavigation'] = $nav;
+ $params['appContents'] = $contentItems;
+ $this->navigationManager->setActiveEntry('files_index');
+
+ return new TemplateResponse(
+ $this->appName,
+ 'index',
+ $params
+ );
+ }
+}
diff --git a/apps/files/index.php b/apps/files/index.php
deleted file mode 100644
index cc007ebdb07..00000000000
--- a/apps/files/index.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-/**
- * @author Björn Schießle <schiessle@owncloud.com>
- * @author Frank Karlitschek <frank@owncloud.org>
- * @author Jakob Sack <mail@jakobsack.de>
- * @author Jan-Christoph Borchardt <hey@jancborchardt.net>
- * @author Joas Schilling <nickvergessen@owncloud.com>
- * @author Jörn Friedrich Dreyer <jfd@butonic.de>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin Appelman <icewind@owncloud.com>
- * @author Roman Geber <rgeber@owncloudapps.com>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Vincent Petry <pvince81@owncloud.com>
- *
- * @copyright Copyright (c) 2015, 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/>
- *
- */
-
-// Check if we are a user
-OCP\User::checkLoggedIn();
-
-// Load the files we need
-OCP\Util::addStyle('files', 'files');
-OCP\Util::addStyle('files', 'upload');
-OCP\Util::addStyle('files', 'mobile');
-OCP\Util::addscript('files', 'app');
-OCP\Util::addscript('files', 'file-upload');
-OCP\Util::addscript('files', 'newfilemenu');
-OCP\Util::addscript('files', 'jquery.iframe-transport');
-OCP\Util::addscript('files', 'jquery.fileupload');
-OCP\Util::addscript('files', 'jquery-visibility');
-OCP\Util::addscript('files', 'fileinfomodel');
-OCP\Util::addscript('files', 'filesummary');
-OCP\Util::addscript('files', 'breadcrumb');
-OCP\Util::addscript('files', 'filelist');
-OCP\Util::addscript('files', 'search');
-
-\OCP\Util::addScript('files', 'favoritesfilelist');
-\OCP\Util::addScript('files', 'tagsplugin');
-\OCP\Util::addScript('files', 'favoritesplugin');
-
-\OCP\Util::addScript('files', 'detailfileinfoview');
-\OCP\Util::addScript('files', 'detailtabview');
-\OCP\Util::addScript('files', 'mainfileinfodetailview');
-\OCP\Util::addScript('files', 'detailsview');
-\OCP\Util::addStyle('files', 'detailsView');
-
-\OC_Util::addVendorScript('core', 'handlebars/handlebars');
-
-OCP\App::setActiveNavigationEntry('files_index');
-
-$l = \OC::$server->getL10N('files');
-
-$isIE8 = false;
-preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
-if (count($matches) > 0 && $matches[1] <= 9) {
- $isIE8 = true;
-}
-
-// if IE8 and "?dir=path&view=someview" was specified, reformat the URL to use a hash like "#?dir=path&view=someview"
-if ($isIE8 && (isset($_GET['dir']) || isset($_GET['view']))) {
- $hash = '#?';
- $dir = isset($_GET['dir']) ? $_GET['dir'] : '/';
- $view = isset($_GET['view']) ? $_GET['view'] : 'files';
- $hash = '#?dir=' . \OCP\Util::encodePath($dir);
- if ($view !== 'files') {
- $hash .= '&view=' . urlencode($view);
- }
- header('Location: ' . OCP\Util::linkTo('files', 'index.php') . $hash);
- exit();
-}
-
-$user = OC_User::getUser();
-
-$config = \OC::$server->getConfig();
-
-// mostly for the home storage's free space
-$dirInfo = \OC\Files\Filesystem::getFileInfo('/', false);
-$storageInfo=OC_Helper::getStorageInfo('/', $dirInfo);
-
-$nav = new OCP\Template('files', 'appnavigation', '');
-
-function sortNavigationItems($item1, $item2) {
- return $item1['order'] - $item2['order'];
-}
-
-\OCA\Files\App::getNavigationManager()->add(
- array(
- 'id' => 'favorites',
- 'appname' => 'files',
- 'script' => 'simplelist.php',
- 'order' => 5,
- 'name' => $l->t('Favorites')
- )
-);
-
-$navItems = \OCA\Files\App::getNavigationManager()->getAll();
-usort($navItems, 'sortNavigationItems');
-$nav->assign('navigationItems', $navItems);
-
-$contentItems = array();
-
-function renderScript($appName, $scriptName) {
- $content = '';
- $appPath = OC_App::getAppPath($appName);
- $scriptPath = $appPath . '/' . $scriptName;
- if (file_exists($scriptPath)) {
- // TODO: sanitize path / script name ?
- ob_start();
- include $scriptPath;
- $content = ob_get_contents();
- @ob_end_clean();
- }
- return $content;
-}
-
-// render the container content for every navigation item
-foreach ($navItems as $item) {
- $content = '';
- if (isset($item['script'])) {
- $content = renderScript($item['appname'], $item['script']);
- }
- $contentItem = array();
- $contentItem['id'] = $item['id'];
- $contentItem['content'] = $content;
- $contentItems[] = $contentItem;
-}
-
-OCP\Util::addscript('files', 'fileactions');
-OCP\Util::addscript('files', 'fileactionsmenu');
-OCP\Util::addscript('files', 'files');
-OCP\Util::addscript('files', 'navigation');
-OCP\Util::addscript('files', 'keyboardshortcuts');
-
-\OC::$server->getEventDispatcher()->dispatch('OCA\Files::loadAdditionalScripts');
-
-$tmpl = new OCP\Template('files', 'index', 'user');
-$tmpl->assign('usedSpacePercent', (int)$storageInfo['relative']);
-$tmpl->assign('owner', $storageInfo['owner']);
-$tmpl->assign('ownerDisplayName', $storageInfo['ownerDisplayName']);
-$tmpl->assign('isPublic', false);
-$tmpl->assign("mailNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_mail_notification', 'no'));
-$tmpl->assign("mailPublicNotificationEnabled", $config->getAppValue('core', 'shareapi_allow_public_notification', 'no'));
-$tmpl->assign("allowShareWithLink", $config->getAppValue('core', 'shareapi_allow_links', 'yes'));
-$tmpl->assign('appNavigation', $nav);
-$tmpl->assign('appContents', $contentItems);
-
-$tmpl->printPage();
diff --git a/apps/files/tests/controller/ViewControllerTest.php b/apps/files/tests/controller/ViewControllerTest.php
new file mode 100644
index 00000000000..028dfce8c58
--- /dev/null
+++ b/apps/files/tests/controller/ViewControllerTest.php
@@ -0,0 +1,250 @@
+<?php
+/**
+ * @author Lukas Reschke <lukas@owncloud.com>
+ *
+ * @copyright Copyright (c) 2015, 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 OCA\Files\Tests\Controller;
+
+use OCA\Files\Controller\ViewController;
+use OCP\AppFramework\Http;
+use OCP\Template;
+use Test\TestCase;
+use OCP\IRequest;
+use OCP\IURLGenerator;
+use OCP\AppFramework\Http\RedirectResponse;
+use OCP\INavigationManager;
+use OCP\IL10N;
+use OCP\IConfig;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+
+/**
+ * Class ViewControllerTest
+ *
+ * @package OCA\Files\Tests\Controller
+ */
+class ViewControllerTest extends TestCase {
+ /** @var IRequest */
+ private $request;
+ /** @var IURLGenerator */
+ private $urlGenerator;
+ /** @var INavigationManager */
+ private $navigationManager;
+ /** @var IL10N */
+ private $l10n;
+ /** @var IConfig */
+ private $config;
+ /** @var EventDispatcherInterface */
+ private $eventDispatcher;
+ /** @var ViewController */
+ private $viewController;
+
+ public function setUp() {
+ parent::setUp();
+ $this->request = $this->getMock('\OCP\IRequest');
+ $this->urlGenerator = $this->getMock('\OCP\IURLGenerator');
+ $this->navigationManager = $this->getMock('\OCP\INavigationManager');
+ $this->l10n = $this->getMock('\OCP\IL10N');
+ $this->config = $this->getMock('\OCP\IConfig');
+ $this->eventDispatcher = $this->getMock('\Symfony\Component\EventDispatcher\EventDispatcherInterface');
+ $this->viewController = $this->getMockBuilder('\OCA\Files\Controller\ViewController')
+ ->setConstructorArgs([
+ 'files',
+ $this->request,
+ $this->urlGenerator,
+ $this->navigationManager,
+ $this->l10n,
+ $this->config,
+ $this->eventDispatcher
+ ])
+ ->setMethods([
+ 'getStorageInfo',
+ 'renderScript'
+ ])
+ ->getMock();
+ }
+
+ public function testIndexWithIE8RedirectAndDirDefined() {
+ $this->request
+ ->expects($this->once())
+ ->method('isUserAgent')
+ ->with(['/MSIE 8.0/'])
+ ->will($this->returnValue(true));
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files.view.index')
+ ->will($this->returnValue('/apps/files/'));
+
+ $expected = new Http\RedirectResponse('/apps/files/#?dir=MyDir');
+ $this->assertEquals($expected, $this->viewController->index('MyDir'));
+ }
+
+ public function testIndexWithIE8RedirectAndViewDefined() {
+ $this->request
+ ->expects($this->once())
+ ->method('isUserAgent')
+ ->with(['/MSIE 8.0/'])
+ ->will($this->returnValue(true));
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files.view.index')
+ ->will($this->returnValue('/apps/files/'));
+
+ $expected = new Http\RedirectResponse('/apps/files/#?dir=/&view=MyView');
+ $this->assertEquals($expected, $this->viewController->index('', 'MyView'));
+ }
+
+ public function testIndexWithIE8RedirectAndViewAndDirDefined() {
+ $this->request
+ ->expects($this->once())
+ ->method('isUserAgent')
+ ->with(['/MSIE 8.0/'])
+ ->will($this->returnValue(true));
+ $this->urlGenerator
+ ->expects($this->once())
+ ->method('linkToRoute')
+ ->with('files.view.index')
+ ->will($this->returnValue('/apps/files/'));
+
+ $expected = new RedirectResponse('/apps/files/#?dir=MyDir&view=MyView');
+ $this->assertEquals($expected, $this->viewController->index('MyDir', 'MyView'));
+ }
+
+ public function testIndexWithRegularBrowser() {
+ $this->request
+ ->expects($this->once())
+ ->method('isUserAgent')
+ ->with(['/MSIE 8.0/'])
+ ->will($this->returnValue(false));
+ $this->viewController
+ ->expects($this->once())
+ ->method('getStorageInfo')
+ ->will($this->returnValue([
+ 'relative' => 123,
+ 'owner' => 'MyName',
+ 'ownerDisplayName' => 'MyDisplayName',
+ ]));
+
+ $this->config
+ ->expects($this->any())
+ ->method('getAppValue')
+ ->will($this->returnArgument(2));
+
+ $nav = new Template('files', 'appnavigation');
+ $nav->assign('navigationItems', [
+ 0 => [
+ 'id' => 'files',
+ 'appname' => 'files',
+ 'script' => 'list.php',
+ 'order' => 0,
+ 'name' => new \OC_L10N_String(new \OC_L10N('files'), 'All files', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ 1 => [
+ 'id' => 'favorites',
+ 'appname' => 'files',
+ 'script' => 'simplelist.php',
+ 'order' => 5,
+ 'name' => null,
+ 'active' => false,
+ 'icon' => '',
+ ],
+ 2 => [
+ 'id' => 'sharingin',
+ 'appname' => 'files_sharing',
+ 'script' => 'list.php',
+ 'order' => 10,
+ 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with you', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ 3 => [
+ 'id' => 'sharingout',
+ 'appname' => 'files_sharing',
+ 'script' => 'list.php',
+ 'order' => 15,
+ 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared with others', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ 4 => [
+ 'id' => 'sharinglinks',
+ 'appname' => 'files_sharing',
+ 'script' => 'list.php',
+ 'order' => 20,
+ 'name' => new \OC_L10N_String(new \OC_L10N('files_sharing'), 'Shared by link', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ 5 => [
+ 'id' => 'trashbin',
+ 'appname' => 'files_trashbin',
+ 'script' => 'list.php',
+ 'order' => 50,
+ 'name' => new \OC_L10N_String(new \OC_L10N('files_trashbin'), 'Deleted files', []),
+ 'active' => false,
+ 'icon' => '',
+ ],
+ ]);
+
+ $expected = new Http\TemplateResponse(
+ 'files',
+ 'index',
+ [
+ 'usedSpacePercent' => 123,
+ 'owner' => 'MyName',
+ 'ownerDisplayName' => 'MyDisplayName',
+ 'isPublic' => false,
+ 'mailNotificationEnabled' => 'no',
+ 'mailPublicNotificationEnabled' => 'no',
+ 'allowShareWithLink' => 'yes',
+ 'appNavigation' => $nav,
+ 'appContents' => [
+ 0 => [
+ 'id' => 'files',
+ 'content' => null,
+ ],
+ 1 => [
+ 'id' => 'favorites',
+ 'content' => null,
+ ],
+ 2 => [
+ 'id' => 'sharingin',
+ 'content' => null,
+ ],
+ 3 => [
+ 'id' => 'sharingout',
+ 'content' => null,
+ ],
+ 4 => [
+ 'id' => 'sharinglinks',
+ 'content' => null,
+ ],
+ 5 => [
+ 'id' => 'trashbin',
+ 'content' => null,
+ ],
+ ],
+ ]
+ );
+ $this->assertEquals($expected, $this->viewController->index('MyDir', 'MyView'));
+ }
+}
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php
index b0be4045541..a32d32fefc5 100644
--- a/lib/private/appframework/dependencyinjection/dicontainer.php
+++ b/lib/private/appframework/dependencyinjection/dicontainer.php
@@ -226,6 +226,10 @@ class DIContainer extends SimpleContainer implements IAppContainer {
return $this->getServer();
});
+ $this->registerService('Symfony\Component\EventDispatcher\EventDispatcherInterface', function ($c) {
+ return $this->getServer()->getEventDispatcher();
+ });
+
$this->registerService('OCP\\AppFramework\\IAppContainer', function ($c) {
return $c;
});
diff --git a/tests/lib/helper.php b/tests/lib/helper.php
index bd527de160d..ca3e0e46d82 100644
--- a/tests/lib/helper.php
+++ b/tests/lib/helper.php
@@ -353,18 +353,24 @@ class Test_Helper extends \Test\TestCase {
$this->assertEquals($expectedResult, $result);
}
+ /**
+ * @return array
+ */
public function provideDocRootAppUrlParts() {
return array(
- array('files', 'index.php', array(), '/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), '/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php?trut=trat&dut=dat'),
);
}
+ /**
+ * @return array
+ */
public function provideSubDirAppUrlParts() {
return array(
- array('files', 'index.php', array(), '/owncloud/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), '/owncloud/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php?trut=trat&dut=dat'),
);
}
@@ -393,18 +399,24 @@ class Test_Helper extends \Test\TestCase {
$this->assertEquals($expectedResult, $result);
}
+ /**
+ * @return array
+ */
public function provideDocRootAppAbsoluteUrlParts() {
return array(
- array('files', 'index.php', array(), 'http://localhost/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), 'http://localhost/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/index.php?trut=trat&dut=dat'),
);
}
+ /**
+ * @return array
+ */
public function provideSubDirAppAbsoluteUrlParts() {
return array(
- array('files', 'index.php', array(), 'http://localhost/owncloud/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), 'http://localhost/owncloud/index.php?trut=trat&dut=dat'),
);
}
diff --git a/tests/lib/urlgenerator.php b/tests/lib/urlgenerator.php
index 60e1a86f16a..a5ab483109f 100644
--- a/tests/lib/urlgenerator.php
+++ b/tests/lib/urlgenerator.php
@@ -53,23 +53,23 @@ class Test_Urlgenerator extends \Test\TestCase {
public function provideRoutes() {
return array(
- array('files_index', 'http://localhost/owncloud/index.php/apps/files/'),
+ array('files_ajax_list', 'http://localhost/owncloud/index.php/apps/files/ajax/list.php'),
array('core_ajax_preview', 'http://localhost/owncloud/index.php/core/preview.png'),
);
}
public function provideDocRootAppUrlParts() {
return array(
- array('files', 'index.php', array(), '/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), '/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/index.php?trut=trat&dut=dat'),
);
}
public function provideSubDirAppUrlParts() {
return array(
- array('files', 'index.php', array(), '/owncloud/index.php/apps/files'),
- array('files', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files?trut=trat&dut=dat'),
+ array('files', 'ajax/list.php', array(), '/owncloud/index.php/apps/files/ajax/list.php'),
+ array('files', 'ajax/list.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php/apps/files/ajax/list.php?trut=trat&dut=dat'),
array('', 'index.php', array('trut' => 'trat', 'dut' => 'dat'), '/owncloud/index.php?trut=trat&dut=dat'),
);
}