summaryrefslogtreecommitdiffstats
path: root/settings
diff options
context:
space:
mode:
authorSam Tuke <samtuke@owncloud.com>2012-09-18 14:35:27 +0100
committerSam Tuke <samtuke@owncloud.com>2012-09-18 14:35:27 +0100
commitb765e883f32bf271c77e4bfa4a88249e5b371a1a (patch)
treefa7851e829f31dc4b7092be509e808ff43bb11c0 /settings
parent9bfdf47cd43139ca5c3fba255fd4486d06b6d72c (diff)
downloadnextcloud-server-b765e883f32bf271c77e4bfa4a88249e5b371a1a.tar.gz
nextcloud-server-b765e883f32bf271c77e4bfa4a88249e5b371a1a.zip
Fixed bug with duplicate entries for installed 3rd party apps in settings->apps
Added method getAppstoreApps to OC_App Added minor documentation
Diffstat (limited to 'settings')
-rw-r--r--settings/ajax/apps/ocs.php5
-rw-r--r--settings/apps.php93
-rw-r--r--settings/js/apps.js14
-rw-r--r--settings/templates/apps.php2
4 files changed, 82 insertions, 32 deletions
diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php
index 71cb046fc8d..a15b21e1744 100644
--- a/settings/ajax/apps/ocs.php
+++ b/settings/ajax/apps/ocs.php
@@ -11,7 +11,7 @@ require_once '../../../lib/base.php';
OC_JSON::checkAdminUser();
-$l = OC_L10N::get('core');
+$l = OC_L10N::get('settings');
if(OC_Config::getValue('appstoreenabled', true)==false) {
OCP\JSON::success(array('type' => 'external', 'data' => array()));
@@ -62,5 +62,4 @@ if(is_array($catagoryNames)) {
}
}
-OCP\JSON::success(array('type' => 'external', 'data' => $apps));
-
+OCP\JSON::success(array('type' => 'external', 'data' => $apps)); \ No newline at end of file
diff --git a/settings/apps.php b/settings/apps.php
index e613814fe94..1481f6fc4ad 100644
--- a/settings/apps.php
+++ b/settings/apps.php
@@ -29,45 +29,110 @@ OC_Util::addStyle( "settings", "settings" );
OC_Util::addScript( "settings", "apps" );
OC_App::setActiveNavigationEntry( "core_apps" );
-$registeredApps=OC_App::getAllApps();
-$apps=array();
+$installedApps = OC_App::getAllApps();
-//TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature
-$blacklist=array('files');//we dont want to show configuration for these
+$remoteApps = OC_App::getAppstoreApps();
-foreach($registeredApps as $app) {
- if(array_search($app, $blacklist)===false) {
+//$remoteApps = array();
+
+//TODO which apps do we want to blacklist and how do we integrate blacklisting with the multi apps folder feature?
+
+$blacklist = array('files');//we dont want to show configuration for these
+
+$appList = array();
+
+foreach ( $installedApps as $app ) {
+
+ if ( array_search( $app, $blacklist ) === false ) {
+
$info=OC_App::getAppInfo($app);
+
if (!isset($info['name'])) {
+
OC_Log::write('core', 'App id "'.$app.'" has no name in appinfo', OC_Log::ERROR);
+
continue;
+
}
- $active=(OC_Appconfig::getValue($app, 'enabled', 'no')=='yes')?true:false;
- $info['active']=$active;
+
+ if ( OC_Appconfig::getValue( $app, 'enabled', 'no') == 'yes' ) {
+
+ $active = true;
+
+ } else {
+
+ $active = false;
+
+ }
+
+ $info['active'] = $active;
+
if(isset($info['shipped']) and ($info['shipped']=='true')) {
+
$info['internal']=true;
+
$info['internallabel']='Internal App';
+
}else{
+
$info['internal']=false;
+
$info['internallabel']='3rd Party App';
+
}
- $info['preview']='trans.png';
- $info['version']=OC_App::getAppVersion($app);
- $apps[]=$info;
+
+ $info['preview'] = 'trans.png';
+
+ $info['version'] = OC_App::getAppVersion($app);
+
+ $appList[] = $info;
+
}
}
-function app_sort($a, $b) {
+// Remove duplicates
+foreach ( $appList as $app ) {
+
+ foreach ( $remoteApps AS $key => $remote ) {
+
+ if (
+ $app['name'] == $remote['name']
+ // To set duplicate detection to use OCS ID instead of string name,
+ // enable this code, remove the line of code above,
+ // and add <ocs_id>[ID]</ocs_id> to info.xml of each 3rd party app:
+ // OR $app['ocs_id'] == $remote['ocs_id']
+ ) {
+
+ unset( $remoteApps[$key]);
+
+ }
+
+ }
+
+}
+
+$combinedApps = array_merge( $appList, $remoteApps );
+
+function app_sort( $a, $b ) {
+
if ($a['active'] != $b['active']) {
+
return $b['active'] - $a['active'];
+
}
+
return strcmp($a['name'], $b['name']);
+
}
-usort($apps, 'app_sort');
+
+usort( $combinedApps, 'app_sort' );
$tmpl = new OC_Template( "settings", "apps", "user" );
-$tmpl->assign('apps', $apps, false);
+
+$tmpl->assign('apps', $combinedApps, false);
+
$appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');
+
$tmpl->assign('appid', $appid);
$tmpl->printPage();
diff --git a/settings/js/apps.js b/settings/js/apps.js
index bb931232763..4ffbc41f22c 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -7,18 +7,6 @@
OC.Settings = OC.Settings || {};
OC.Settings.Apps = OC.Settings.Apps || {
- loadOCS:function() {
- $.getJSON(OC.filePath('settings', 'ajax', 'apps/ocs.php'), function(jsondata) {
- if(jsondata.status == 'success'){
- var apps = jsondata.data;
- $.each(apps, function(b, appdata) {
- OC.Settings.Apps.insertApp(appdata);
- });
- } else {
- OC.dialogs.alert(jsondata.data.message, t('core', 'Error'));
- }
- });
- },
loadApp:function(app) {
var page = $('#rightcontent');
page.find('p.license').show();
@@ -137,6 +125,4 @@ $(document).ready(function(){
$('#leftcontent').animate({scrollTop: $(item).offset().top-70}, 'slow','swing');
}
}
-
- OC.Settings.Apps.loadOCS();
});
diff --git a/settings/templates/apps.php b/settings/templates/apps.php
index 30f919ac753..0662148ebf2 100644
--- a/settings/templates/apps.php
+++ b/settings/templates/apps.php
@@ -11,7 +11,7 @@
</div>
<ul id="leftcontent" class="applist">
<?php foreach($_['apps'] as $app):?>
- <li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['id'] ?>"
+ <li <?php if($app['active']) echo 'class="active"'?> data-id="<?php echo $app['id'] ?>" <?php if ( isset( $app['ocs_id'] ) ) { echo "data-id-ocs=\"{$app['ocs_id']}\""; } ?>
data-type="<?php echo $app['internal'] ? 'internal' : 'external' ?>" data-installed="1">
<a class="app<?php if(!$app['internal']) echo ' externalapp' ?>" href="?appid=<?php echo $app['id'] ?>"><?php echo htmlentities($app['name']) ?></a>
<script type="application/javascript">