summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/App/AppManager.php16
-rw-r--r--lib/public/App/AppPathNotFoundException.php31
-rw-r--r--lib/public/App/IAppManager.php10
-rw-r--r--tests/lib/App/ManagerTest.php10
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())