From caacb6c261140cd8f86ba5e430d2d9af217eae45 Mon Sep 17 00:00:00 2001 From: Julius Haertl Date: Thu, 17 Nov 2016 12:30:52 +0100 Subject: [PATCH] Expose getAppPath to public API Signed-off-by: Julius Haertl --- lib/private/App/AppManager.php | 16 +++++++++++ lib/public/App/AppPathNotFoundException.php | 31 +++++++++++++++++++++ lib/public/App/IAppManager.php | 10 +++++++ tests/lib/App/ManagerTest.php | 10 +++++++ 4 files changed, 67 insertions(+) create mode 100644 lib/public/App/AppPathNotFoundException.php diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php index 55fd575e12..fca5c9b87a 100644 --- a/lib/private/App/AppManager.php +++ b/lib/private/App/AppManager.php @@ -31,6 +31,7 @@ namespace OC\App; +use OCP\App\AppPathNotFoundException; use OCP\App\IAppManager; use OCP\App\ManagerEvent; use OCP\IAppConfig; @@ -265,6 +266,21 @@ class AppManager implements IAppManager { $this->clearAppsCache(); } + /** + * Get the directory for the given app. + * + * @param string $appId + * @return string + * @throws AppPathNotFoundException if app folder can't be found + */ + public function getAppPath($appId) { + $appPath = \OC_App::getAppPath($appId); + if($appPath === false) { + throw new AppPathNotFoundException('Could not find path for ' . $appId); + } + return $appPath; + } + /** * Clear the cached list of apps when enabling/disabling an app */ diff --git a/lib/public/App/AppPathNotFoundException.php b/lib/public/App/AppPathNotFoundException.php new file mode 100644 index 0000000000..071eb2f837 --- /dev/null +++ b/lib/public/App/AppPathNotFoundException.php @@ -0,0 +1,31 @@ + + * + * @author Julius Härtl + * + * @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 + * + */ + +namespace OCP\App; + +/** + * Class AppPathNotFoundException + * + * @package OCP\App + * @since 11.0.0 + */ +class AppPathNotFoundException extends \Exception {} \ No newline at end of file diff --git a/lib/public/App/IAppManager.php b/lib/public/App/IAppManager.php index 44990b7c47..057a964ce0 100644 --- a/lib/public/App/IAppManager.php +++ b/lib/public/App/IAppManager.php @@ -78,6 +78,16 @@ interface IAppManager { */ public function disableApp($appId); + /** + * Get the directory for the given app. + * + * @param string $appId + * @return string + * @since 11.0.0 + * @throws AppPathNotFoundException + */ + public function getAppPath($appId); + /** * List all apps enabled for a user * diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php index e04f7c8237..3dbcb8a560 100644 --- a/tests/lib/App/ManagerTest.php +++ b/tests/lib/App/ManagerTest.php @@ -11,6 +11,7 @@ namespace Test\App; use OC\Group\Group; use OC\User\User; +use OCP\App\AppPathNotFoundException; use Test\TestCase; /** @@ -260,6 +261,15 @@ class ManagerTest extends TestCase { $this->assertFalse($this->manager->isEnabledForUser('test', $user)); } + public function testGetAppPath() { + $this->assertEquals(\OC::$SERVERROOT . '/apps/files', $this->manager->getAppPath('files')); + } + + public function testGetAppPathFail() { + $this->expectException(AppPathNotFoundException::class); + $this->manager->getAppPath('testnotexisting'); + } + public function testIsEnabledForUserEnabledForGroup() { $user = $this->newUser('user1'); $this->groupManager->expects($this->once())