Merge pull request #8264 from owncloud/app-enable-by-group

Add the option to enable apps only for specific groups
This commit is contained in:
icewind1991 2014-06-03 19:01:12 +02:00
commit cdf8a123e7
6 changed files with 378 additions and 258 deletions

View File

@ -175,7 +175,8 @@
button.animate({'width':newWidth},undefined,undefined,function(){ button.animate({'width':newWidth},undefined,undefined,function(){
button.css('width',''); button.css('width','');
}); });
list.animate({'width':newOuterWidth,'left':pos.left+3}); list.animate({'width':newOuterWidth,'left':pos.left});
self.change();
}); });
var li=$('<li></li>'); var li=$('<li></li>');
li.append(input).append(label); li.append(input).append(label);
@ -285,7 +286,7 @@
) { ) {
list.css({ list.css({
top:pos.top+button.outerHeight()-5, top:pos.top+button.outerHeight()-5,
left:pos.left+3, left:pos.left,
width:(button.outerWidth()-2)+'px', width:(button.outerWidth()-2)+'px',
'max-height':($(document).height()-(button.offset().top+button.outerHeight()+10))+'px' 'max-height':($(document).height()-(button.offset().top+button.outerHeight()+10))+'px'
}); });
@ -296,7 +297,7 @@
list.css('max-height', $(document).height()-($(document).height()-(pos.top)+50)+'px'); list.css('max-height', $(document).height()-($(document).height()-(pos.top)+50)+'px');
list.css({ list.css({
top:pos.top - list.height(), top:pos.top - list.height(),
left:pos.left+3, left:pos.left,
width:(button.outerWidth()-2)+'px' width:(button.outerWidth()-2)+'px'
}); });

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,10 @@
OC_JSON::checkAdminUser(); OC_JSON::checkAdminUser();
OCP\JSON::callCheck(); OCP\JSON::callCheck();
$groups = isset($_POST['groups']) ? $_POST['groups'] : null;
try { try {
OC_App::enable(OC_App::cleanAppId($_POST['appid'])); OC_App::enable(OC_App::cleanAppId($_POST['appid']), $groups);
OC_JSON::success(); OC_JSON::success();
} catch (Exception $e) { } catch (Exception $e) {
OC_Log::write('core', $e->getMessage(), OC_Log::ERROR); OC_Log::write('core', $e->getMessage(), OC_Log::ERROR);

View File

@ -25,13 +25,16 @@ OC_Util::checkAdminUser();
// Load the files we need // Load the files we need
OC_Util::addStyle( "settings", "settings" ); OC_Util::addStyle( "settings", "settings" );
OC_Util::addScript("core", "multiselect");
OC_App::setActiveNavigationEntry( "core_apps" ); OC_App::setActiveNavigationEntry( "core_apps" );
$combinedApps = OC_App::listAllApps(); $combinedApps = OC_App::listAllApps();
$groups = \OC_Group::getGroups();
$tmpl = new OC_Template( "settings", "apps", "user" ); $tmpl = new OC_Template( "settings", "apps", "user" );
$tmpl->assign('apps', $combinedApps); $tmpl->assign('apps', $combinedApps);
$tmpl->assign('groups', $groups);
$appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):''); $appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');

View File

@ -88,12 +88,41 @@ OC.Settings.Apps = OC.Settings.Apps || {
} else { } else {
page.find(".warning").hide(); page.find(".warning").hide();
} }
page.find("div.multiselect").parent().remove();
if(OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
page.find("#groups_enable").hide();
page.find("label[for='groups_enable']").hide();
page.find("#groups_enable").attr('checked', null);
} else {
$('#group_select > option').each(function (i, el) {
if (app.groups.length === 0 || app.groups.indexOf(el.value) >= 0) {
$(el).attr('selected', 'selected');
} else {
$(el).attr('selected', null);
}
});
if (app.active) {
if (app.groups.length) {
$('#group_select').multiSelect();
page.find("#groups_enable").attr('checked','checked');
} else {
page.find("#groups_enable").attr('checked', null);
}
page.find("#groups_enable").show();
page.find("label[for='groups_enable']").show();
} else {
page.find("#groups_enable").hide();
page.find("label[for='groups_enable']").hide();
}
}
}, },
enableApp:function(appid, active, element) { enableApp:function(appid, active, element, groups) {
console.log('enableApp:', appid, active, element); groups = groups || [];
var appitem=$('#app-navigation ul li[data-id="'+appid+'"]'); var appitem=$('#app-navigation ul li[data-id="'+appid+'"]');
element.val(t('settings','Please wait....')); element.val(t('settings','Please wait....'));
if(active) { if(active && !groups.length) {
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) { $.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) {
if(!result || result.status !== 'success') { if(!result || result.status !== 'success') {
if (result.data && result.data.message) { if (result.data && result.data.message) {
@ -108,14 +137,19 @@ OC.Settings.Apps = OC.Settings.Apps || {
} }
else { else {
appitem.data('active',false); appitem.data('active',false);
appitem.data('groups', '');
element.data('active',false); element.data('active',false);
OC.Settings.Apps.removeNavigation(appid); OC.Settings.Apps.removeNavigation(appid);
appitem.removeClass('active'); appitem.removeClass('active');
element.val(t('settings','Enable')); element.val(t('settings','Enable'));
element.parent().find("#groups_enable").hide();
element.parent().find("label[for='groups_enable']").hide();
var app = OC.get('appData_' + appid);
app.active = false;
} }
},'json'); },'json');
} else { } else {
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid:appid},function(result) { $.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appid, groups: groups},function(result) {
if(!result || result.status !== 'success') { if(!result || result.status !== 'success') {
if (result.data && result.data.message) { if (result.data && result.data.message) {
OC.Settings.Apps.showErrorMessage(result.data.message); OC.Settings.Apps.showErrorMessage(result.data.message);
@ -132,6 +166,21 @@ OC.Settings.Apps = OC.Settings.Apps || {
element.data('active',true); element.data('active',true);
appitem.addClass('active'); appitem.addClass('active');
element.val(t('settings','Disable')); element.val(t('settings','Disable'));
var app = OC.get('appData_' + appid);
app.active = true;
if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
element.parent().find("#groups_enable").hide();
element.parent().find("label[for='groups_enable']").hide();
} else {
element.parent().find("#groups_enable").show();
element.parent().find("label[for='groups_enable']").show();
if (groups) {
appitem.data('groups', JSON.stringify(groups));
} else {
appitem.data('groups', '');
}
}
} }
},'json') },'json')
.fail(function() { .fail(function() {
@ -145,7 +194,6 @@ OC.Settings.Apps = OC.Settings.Apps || {
} }
}, },
updateApp:function(appid, element) { updateApp:function(appid, element) {
console.log('updateApp:', appid, element);
element.val(t('settings','Updating....')); element.val(t('settings','Updating....'));
$.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) { $.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) {
if(!result || result.status !== 'success') { if(!result || result.status !== 'success') {
@ -238,12 +286,18 @@ OC.Settings.Apps = OC.Settings.Apps || {
showErrorMessage: function(message) { showErrorMessage: function(message) {
$('.appinfo .warning').show(); $('.appinfo .warning').show();
$('.appinfo .warning').text(message); $('.appinfo .warning').text(message);
},
isType: function(app, type){
return app.types && app.types.indexOf(type) !== -1;
} }
}; };
$(document).ready(function(){ $(document).ready(function(){
$('#app-navigation ul li').each(function(index,li){ $('#app-navigation ul li').each(function(index,li){
var app = OC.get('appData_'+$(li).data('id')); var app = OC.get('appData_'+$(li).data('id'));
if (app) {
app.groups= $(li).data('groups') || [];
}
$(li).data('app',app); $(li).data('app',app);
$(this).find('span.hidden').remove(); $(this).find('span.hidden').remove();
}); });
@ -281,6 +335,20 @@ $(document).ready(function(){
} }
}); });
$('#group_select').change(function() {
var element = $('#app-content input.enable');
var groups = $(this).val();
var appid = element.data('appid');
if (appid) {
OC.Settings.Apps.enableApp(appid, false, element, groups);
var li = $('[data-id="'+appid+'"]');
var app = OC.get('appData_' + $(li).data('id'));
app.groups = groups;
li.data('groups', groups);
li.attr('data-groups', JSON.stringify(groups));
}
});
if(appid) { if(appid) {
var item = $('#app-navigation ul li[data-id="'+appid+'"]'); var item = $('#app-navigation ul li[data-id="'+appid+'"]');
if(item) { if(item) {
@ -289,4 +357,16 @@ $(document).ready(function(){
$('#app-navigation').animate({scrollTop: $(item).offset().top-70}, 'slow','swing'); $('#app-navigation').animate({scrollTop: $(item).offset().top-70}, 'slow','swing');
} }
} }
$("#groups_enable").change(function() {
if (this.checked) {
$("div.multiselect").parent().remove();
$('#group_select').multiSelect();
} else {
$('#group_select').hide().val(null);
$("div.multiselect").parent().remove();
}
$('#group_select').change();
});
}); });

View File

@ -16,7 +16,7 @@
<?php endif; ?> <?php endif; ?>
<?php foreach($_['apps'] as $app):?> <?php foreach($_['apps'] as $app):?>
<li <?php if($app['active']) print_unescaped('class="active"')?> data-id="<?php p($app['id']) ?>" <li <?php if($app['active']) print_unescaped('class="active"')?> data-id="<?php p($app['id']) ?>" data-groups="<?php p($app['groups']) ?>"
<?php if ( isset( $app['ocs_id'] ) ) { print_unescaped("data-id-ocs=\"{".OC_Util::sanitizeHTML($app['ocs_id'])."}\""); } ?> <?php if ( isset( $app['ocs_id'] ) ) { print_unescaped("data-id-ocs=\"{".OC_Util::sanitizeHTML($app['ocs_id'])."}\""); } ?>
data-type="<?php p($app['internal'] ? 'internal' : 'external') ?>" data-installed="1"> data-type="<?php p($app['internal'] ? 'internal' : 'external') ?>" data-installed="1">
<a class="app<?php if(!$app['internal']) p(' externalapp') ?>" <a class="app<?php if(!$app['internal']) p(' externalapp') ?>"
@ -53,6 +53,16 @@
print_unescaped($l->t('<span class="licence"></span>-licensed by <span class="author"></span>'));?></p> print_unescaped($l->t('<span class="licence"></span>-licensed by <span class="author"></span>'));?></p>
<input class="enable hidden" type="submit" /> <input class="enable hidden" type="submit" />
<input class="update hidden" type="submit" value="<?php p($l->t('Update')); ?>" /> <input class="update hidden" type="submit" value="<?php p($l->t('Update')); ?>" />
<br />
<input class="hidden" type="checkbox" id="groups_enable"/>
<label class="hidden" for="groups_enable"><?php p($l->t('Enable only for specific groups')); ?></label>
<br />
<select class="hidden" id="group_select" multiple="multiple" title="<?php p($l->t('All')); ?>">
<?php foreach($_['groups'] as $group):?>
<option value="<?php p($group);?>"><?php p($group); ?></option>
<?php endforeach;?>
</select>
<div class="warning hidden"></div> <div class="warning hidden"></div>
</div> </div>
</div> </div>