X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fpeople%2FPeopleEntryArea.java;h=eb39e062c29a439628f788951ae92d8b1fafa5b3;hb=446d637e8e7c48edce93f11de493fdf22171eb3e;hp=9ab179c6e700defb44836c7bbe4761fe4d826fbf;hpb=3505709f50eec3a940e82c6aac7bc2d4bd1dec65;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java b/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java index 9ab179c..eb39e06 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/people/PeopleEntryArea.java @@ -25,8 +25,8 @@ import org.argeo.cms.swt.CmsSwtTheme; import org.argeo.cms.swt.CmsSwtUtils; import org.argeo.cms.swt.Selected; import org.argeo.cms.swt.acr.SwtUiProvider; -import org.argeo.cms.swt.widgets.SwtHierarchicalPart; -import org.argeo.cms.swt.widgets.SwtTabularPart; +import org.argeo.cms.swt.widgets.SwtTableView; +import org.argeo.cms.swt.widgets.SwtTreeView; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ux.widgets.AbstractHierarchicalPart; import org.argeo.cms.ux.widgets.Column; @@ -34,6 +34,7 @@ import org.argeo.cms.ux.widgets.DefaultTabularPart; import org.argeo.cms.ux.widgets.HierarchicalPart; import org.argeo.osgi.useradmin.UserDirectory; import org.argeo.util.directory.HierarchyUnit; +import org.argeo.util.directory.ldap.IpaUtils; import org.argeo.util.naming.LdapAttrs; import org.argeo.util.naming.LdapObjs; import org.eclipse.jface.window.Window; @@ -84,14 +85,22 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { List visible = new ArrayList<>(); if (parent != null) { for (HierarchyUnit hu : parent.getDirectHierarchyUnits(true)) { - if (CurrentUser.implies(CmsRole.userAdmin, hu.getContext())) { + if (CurrentUser.implies(CmsRole.userAdmin, hu.getBase()) // + ) // IPA + { visible.add(hu); } } } else { for (UserDirectory directory : cmsUserManager.getUserDirectories()) { - if (CurrentUser.implies(CmsRole.userAdmin, directory.getContext())) { - visible.add(directory); + if (CurrentUser.implies(CmsRole.userAdmin, directory.getBase()) // + || CurrentUser.implies(CmsRole.userAdmin, + IpaUtils.IPA_ACCOUNTS_RDN + "," + directory.getBase())) // IPA + { + // we do not show the base level + for (HierarchyUnit hu : directory.getDirectHierarchyUnits(true)) { + visible.add(hu); + } } } @@ -104,9 +113,13 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { return model.getHierarchyUnitName(); } + @Override + public CmsIcon getIcon(HierarchyUnit model) { + return SuiteIcon.group; + } + }; - SwtHierarchicalPart directoriesView = new SwtHierarchicalPart<>(sashForm, SWT.NONE, - hierarchyPart); + SwtTreeView directoriesView = new SwtTreeView<>(sashForm, SWT.NONE, hierarchyPart); DefaultTabularPart usersPart = new DefaultTabularPart<>() { @@ -114,13 +127,24 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { protected List asList(HierarchyUnit hu) { List roles = new ArrayList<>(); UserDirectory ud = (UserDirectory) hu.getDirectory(); - for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) { - if (!directChild.isFunctional()) { - for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) { - Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r); - // if (r instanceof Person || r instanceof Organization) - if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName())) - roles.add(content); + if (ud.getRealm().isPresent()) { + for (Role r : ud.getHierarchyUnitRoles(ud, null, true)) { + Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r); + // if (r instanceof Person || r instanceof Organization) + if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), LdapObjs.organization.qName())) + roles.add(content); + } + + } else { + for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) { + if (!directChild.isFunctional()) { + for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) { + Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r); + // if (r instanceof Person || r instanceof Organization) + if (content.hasContentClass(LdapObjs.inetOrgPerson.qName(), + LdapObjs.organization.qName())) + roles.add(content); + } } } } @@ -161,7 +185,7 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { }); usersPart.addColumn((Column) (role) -> role.attr(LdapAttrs.mail.qName())); - SwtTabularPart usersView = new SwtTabularPart<>(sashForm, SWT.NONE, usersPart); + SwtTableView usersView = new SwtTableView<>(sashForm, SWT.NONE, usersPart); // toolbar Composite bottom = new Composite(parent, SWT.NONE); @@ -181,7 +205,10 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { // CONTROLLER hierarchyPart.onSelected((o) -> { if (o instanceof HierarchyUnit) { - usersPart.setInput((HierarchyUnit) o); + HierarchyUnit hierarchyUnit = (HierarchyUnit) o; + usersPart.setInput(hierarchyUnit); + cmsView.sendEvent(SuiteEvent.refreshPart.topic(), + SuiteEvent.eventProperties(ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit))); } });