diff --git a/admin/inc/class.admin_categories.inc.php b/admin/inc/class.admin_categories.inc.php index eba69204c1..d49cb4d220 100644 --- a/admin/inc/class.admin_categories.inc.php +++ b/admin/inc/class.admin_categories.inc.php @@ -143,6 +143,7 @@ class admin_categories { case 'save': case 'apply': + if(is_array($content['owner'])) $content['owner'] = implode(',',$content['owner']); if($content['owner'] == '') $content['owner'] = 0; if ($content['id'] && self::$acl_edit) { @@ -160,6 +161,10 @@ class admin_categories !$content['parent'] && self::$acl_add)) { $content['id'] = $cats->add($content); + if ($button == 'save') + { + egw_framework::window_close(); + } $msg = lang('Category saved.'); } else @@ -174,6 +179,9 @@ class admin_categories { $cats->delete($content['id'],$delete_subs,!$delete_subs); $msg = lang('Category deleted.'); + egw_framework::refresh_opener($msg, $appname, $content['id']); + egw_framework::window_close(); + return; } else { @@ -182,18 +190,7 @@ class admin_categories } break; } - $link = egw::link('/index.php',array( - 'menuaction' => $this->list_link, - 'appname' => $appname, - 'msg' => $msg, - )); - $js = "window.opener.location='$link';"; - if ($button == 'save' || $button == 'delete') - { - echo "
\n"; - common::egw_exit(); - } - if (!empty($js)) $GLOBALS['egw']->js->set_onload($js); + egw_framework::refresh_opener($msg, $appname, $content['id']); } $content['msg'] = $msg; if(!$content['appname']) $content['appname'] = $appname; @@ -255,12 +252,7 @@ class admin_categories } egw_framework::validate_file('.','global_categories','admin'); - egw_framework::set_onload('$j(document).ready(function() { - cat_original_owner = [' . ($content['owner'] ? $content['owner'] : ($content['id'] ? '0' : '')) .']; - permission_prompt = \'' . lang('Removing access for groups may cause problems for data in this category. Are you sure? Users in these groups may no longer have access:').'\'; - change_icon(); - });'); - + $readonlys['button[delete]'] = !$content['id'] || !self::$acl_delete || // cant delete not yet saved category $appname != $content['appname'] || // Can't edit a category from a different app ($this->appname != 'admin' && $content['owner'] != $GLOBALS['egw_info']['user']['account_id']); diff --git a/admin/js/global_categories.js b/admin/js/global_categories.js index a1184ccab5..29a6544014 100644 --- a/admin/js/global_categories.js +++ b/admin/js/global_categories.js @@ -9,45 +9,45 @@ var permission_prompt; /** * Check to see if admin has taken away access to a category */ -function check_owner(element_id) { - var checkboxes = $j(':checkbox', document.getElementById(element_id)); - var all_users = $j(document.getElementById(element_id + '[0]')); +function check_owner(button) { + var select_owner = button.getRoot().getWidgetById('owner') + var owner = select_owner.get_value(); + if(typeof owner != 'object') + { + owner = [owner]; + } + var all_users = owner.indexOf('0') >= 0; // If they checked all users, uncheck the others - if(all_users.length > 0 && all_users.prop("checked")) { - checkboxes.prop("checked",false); - all_users.prop("checked", true); - checkboxes = $j(':checkbox', document.getElementById(element_id)).filter(':checked'); + if(all_users) { + select_owner.set_value(['0']); return true; } // Find out what changed var seen = [], diff = [], labels = []; + var cat_original_owner = select_owner.getArrayMgr('content').getEntry('owner'); + if(typeof cat_original_owner != "object") + { + cat_original_owner = [cat_original_owner]; + } for ( var i = 0; i < cat_original_owner.length; i++) { - var checkbox = checkboxes.filter('[value="'+cat_original_owner[i]+'"]'); - if(checkbox.filter(':checked').length == 0 && checkbox.get(0) != undefined) { + if(owner.indexOf(cat_original_owner[i]) < 0) + { + var checkbox = $j('input[value="'+cat_original_owner[i]+'"]',select_owner.node); diff.push(cat_original_owner[i]); labels.push($j(checkbox.get(0).nextSibling).text()); } } - // Single selection? - if(checkboxes.length == 0) { - var new_group = $j('input#'+element_id); - if(new_group.length > 0 && new_group.attr('value') != 0 && cat_original_owner.length > 0) { - diff.push(cat_original_owner[0]); - var selector = 'option[value="'+cat_original_owner[0]+'"]'; - labels.push("\n"+$j(selector, new_group).text()); - } - } - // Somebody will lose permission, give warning. if(diff.length > 0) { - var msg = permission_prompt; + var msg = egw.lang('Removing access for groups may cause problems for data in this category. Are you sure? Users in these groups may no longer have access:'); for( var i = 0; i < labels.length; i++) { msg += labels[i]; } - return confirm(msg); + return et2_dialog.confirm(button,msg); + } return true; } @@ -55,21 +55,12 @@ function check_owner(element_id) { /** * Show icon based on icon-selectbox, hide placeholder (broken image), if no icon selected */ -function change_icon(_icon) +function change_icon(widget) { - var img = document.getElementById('exec[icon_url]') || document.getElementById('icon_url'); + var img = widget.getRoot().getWidgetById('icon_url'); - if (typeof _icon == 'undefined') + if (img) { - _icon = document.getElementById('exec[data][icon]') || document.getElementById('data[icon]'); - } - if (_icon && _icon.value) - { - img.src = img.src.replace(/\/[^\/]*$/,'\/'+_icon.value); - img.style.display = 'block'; - } - else if (img) - { - img.style.display = 'none'; + img.set_src(widget.getValue()); } } diff --git a/admin/templates/default/categories.edit.xet b/admin/templates/default/categories.edit.xet index 0016b048d3..dcadced692 100644 --- a/admin/templates/default/categories.edit.xet +++ b/admin/templates/default/categories.edit.xet @@ -87,7 +87,7 @@