summaryrefslogtreecommitdiffstats
path: root/settings/controller
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2014-10-28 11:13:20 +0100
committerLukas Reschke <lukas@owncloud.com>2014-10-28 11:13:20 +0100
commit437a660680ee563d75ce2a3fc916244ff5512e2a (patch)
tree08bc1737df3e26cb10c9016655d8ca6831a54134 /settings/controller
parent4461e69873aac223fea410d8e78c3e7674541c17 (diff)
parente4227658d9d80725620ab33b68de5c26c8ed67ad (diff)
downloadnextcloud-server-437a660680ee563d75ce2a3fc916244ff5512e2a.tar.gz
nextcloud-server-437a660680ee563d75ce2a3fc916244ff5512e2a.zip
Merge pull request #11600 from owncloud/refactor-appsettings-to-app-framework
Migrate new app settings to AppFramework
Diffstat (limited to 'settings/controller')
-rw-r--r--settings/controller/appsettingscontroller.php132
1 files changed, 132 insertions, 0 deletions
diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php
new file mode 100644
index 00000000000..27205400aff
--- /dev/null
+++ b/settings/controller/appsettingscontroller.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @author Thomas Müller
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com, 2014 Thomas Müller deepdiver@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Controller;
+
+use \OCP\AppFramework\Controller;
+use OCP\IRequest;
+use OCP\IL10N;
+use OCP\IConfig;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class AppSettingsController extends Controller {
+
+ /** @var \OCP\IL10N */
+ private $l10n;
+ /** @var IConfig */
+ private $config;
+
+ /**
+ * @param string $appName
+ * @param IRequest $request
+ * @param IL10N $l10n
+ * @param IConfig $config
+ */
+ public function __construct($appName,
+ IRequest $request,
+ IL10N $l10n,
+ IConfig $config) {
+ parent::__construct($appName, $request);
+ $this->l10n = $l10n;
+ $this->config = $config;
+ }
+
+ /**
+ * Get all available categories
+ * @return array
+ */
+ public function listCategories() {
+
+ $categories = array(
+ array('id' => 0, 'displayName' => (string)$this->l10n->t('Enabled') ),
+ array('id' => 1, 'displayName' => (string)$this->l10n->t('Not enabled') ),
+ );
+
+ if($this->config->getSystemValue('appstoreenabled', true)) {
+ $categories[] = array('id' => 2, 'displayName' => (string)$this->l10n->t('Recommended') );
+ // apps from external repo via OCS
+ $ocs = \OC_OCSClient::getCategories();
+ foreach($ocs as $k => $v) {
+ $categories[] = array(
+ 'id' => $k,
+ 'displayName' => str_replace('ownCloud ', '', $v)
+ );
+ }
+ }
+
+ $categories['status'] = 'success';
+
+ return $categories;
+ }
+
+ /**
+ * Get all available categories
+ * @param int $category
+ * @return array
+ */
+ public function listApps($category = 0) {
+ $apps = array();
+
+ switch($category) {
+ // installed apps
+ case 0:
+ $apps = \OC_App::listAllApps(true);
+ $apps = array_filter($apps, function($app) {
+ return $app['active'];
+ });
+ break;
+ // not-installed apps
+ case 1:
+ $apps = \OC_App::listAllApps(true);
+ $apps = array_filter($apps, function($app) {
+ return !$app['active'];
+ });
+ break;
+ default:
+ if ($category === 2) {
+ $apps = \OC_App::getAppstoreApps('approved');
+ $apps = array_filter($apps, function($app) {
+ return isset($app['internalclass']) && $app['internalclass'] === 'recommendedapp';
+ });
+ } else {
+ $apps = \OC_App::getAppstoreApps('approved', $category);
+ }
+ if (!$apps) {
+ $apps = array();
+ }
+ usort($apps, function ($a, $b) {
+ $a = (int)$a['score'];
+ $b = (int)$b['score'];
+ if ($a === $b) {
+ return 0;
+ }
+ return ($a > $b) ? -1 : 1;
+ });
+ break;
+ }
+
+ // fix groups to be an array
+ $apps = array_map(function($app){
+ $groups = array();
+ if (is_string($app['groups'])) {
+ $groups = json_decode($app['groups']);
+ }
+ $app['groups'] = $groups;
+ $app['canUnInstall'] = !$app['active'] && $app['removable'];
+ return $app;
+ }, $apps);
+
+ return array('apps' => $apps, 'status' => 'success');
+ }
+
+}