diff options
-rw-r--r-- | lib/private/App/AppManager.php | 16 | ||||
-rw-r--r-- | lib/public/App/AppPathNotFoundException.php | 31 | ||||
-rw-r--r-- | lib/public/App/IAppManager.php | 10 | ||||
-rw-r--r-- | tests/lib/App/ManagerTest.php | 10 |
4 files changed, 67 insertions, 0 deletions
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php index 55fd575e129..fca5c9b87ac 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; @@ -266,6 +267,21 @@ class AppManager implements IAppManager { } /** + * 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 */ public function clearAppsCache() { diff --git a/lib/public/App/AppPathNotFoundException.php b/lib/public/App/AppPathNotFoundException.php new file mode 100644 index 00000000000..071eb2f8377 --- /dev/null +++ b/lib/public/App/AppPathNotFoundException.php @@ -0,0 +1,31 @@ +<?php +/** + * @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net> + * + * @author Julius Härtl <jus@bitgrid.net> + * + * @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 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 44990b7c47c..057a964ce0a 100644 --- a/lib/public/App/IAppManager.php +++ b/lib/public/App/IAppManager.php @@ -79,6 +79,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 * * @param \OCP\IUser $user diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php index e04f7c82375..3dbcb8a5609 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()) |