X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2Fpeople%2FPeopleEntryArea.java;h=789698bcf21f4904a5217244478be393cf432a86;hb=f1b87af2e0de38f1f49ab8fe68f9988018914811;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..789698b 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 @@ -13,31 +13,31 @@ import org.argeo.api.cms.ux.CmsIcon; import org.argeo.api.cms.ux.CmsView; import org.argeo.app.ui.SuiteEvent; import org.argeo.app.ui.SuiteIcon; -import org.argeo.app.ui.dialogs.NewUserWizard; import org.argeo.cms.CmsUserManager; import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.auth.CmsRole; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.UserAdminUtils; import org.argeo.cms.jcr.acr.JcrContent; -import org.argeo.cms.jface.dialog.CmsWizardDialog; 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.SwtGuidedFormDialog; +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; import org.argeo.cms.ux.widgets.DefaultTabularPart; +import org.argeo.cms.ux.widgets.GuidedForm; 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; -import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.GridData; @@ -84,14 +84,27 @@ 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())) { - visible.add(hu); - } + // if parent was visible, it is visible + // TODO restrict more? + +// 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 + { + // TODO show base level + } + for (HierarchyUnit hu : directory.getDirectHierarchyUnits(true)) { + if (CurrentUser.implies(CmsRole.userAdmin, hu.getBase())) { + visible.add(hu); + } } } @@ -101,12 +114,22 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { @Override public String getText(HierarchyUnit model) { - return model.getHierarchyUnitName(); + return model.getHierarchyUnitLabel(CurrentUser.locale()); + } + + @Override + public CmsIcon getIcon(HierarchyUnit model) { + Content content = ContentUtils.hierarchyUnitToContent(contentSession, model); + if (content.hasContentClass(LdapObjs.organization.qName())) + return SuiteIcon.organisation; + else if (content.hasContentClass(LdapObjs.posixGroup.qName())) + return SuiteIcon.users; + else + return SuiteIcon.addressBook; } }; - SwtHierarchicalPart directoriesView = new SwtHierarchicalPart<>(sashForm, SWT.NONE, - hierarchyPart); + SwtTreeView directoriesView = new SwtTreeView<>(sashForm, SWT.NONE, hierarchyPart); DefaultTabularPart usersPart = new DefaultTabularPart<>() { @@ -114,13 +137,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); + } } } } @@ -143,10 +177,12 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { @Override public CmsIcon getIcon(Content role) { - if (role.isContentClass(LdapObjs.inetOrgPerson.qName())) + if (role.hasContentClass(LdapObjs.posixAccount.qName())) + return SuiteIcon.user; + else if (role.isContentClass(LdapObjs.inetOrgPerson.qName())) return SuiteIcon.person; else if (role.isContentClass(LdapObjs.organization.qName())) - return SuiteIcon.organisation; + return SuiteIcon.organisationContact; else if (role.isContentClass(LdapObjs.groupOfNames.qName())) return SuiteIcon.group; else @@ -161,7 +197,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 +217,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))); } }); @@ -203,9 +242,10 @@ public class PeopleEntryArea implements SwtUiProvider, CmsUiProvider { }); addItem.addSelectionListener((Selected) (e) -> { - // SuiteUtils.getOrCreateUserNode(adminSession, userDn); - Wizard wizard = new NewUserWizard(null); - CmsWizardDialog dialog = new CmsWizardDialog(parent.getShell(), wizard); + HierarchyUnit hierarchyUnit = usersPart.getInput(); + Content huContent = ContentUtils.hierarchyUnitToContent(contentSession, hierarchyUnit); + GuidedForm wizard = new NewUserForm(cmsUserManager, huContent); + SwtGuidedFormDialog dialog = new SwtGuidedFormDialog(parent.getShell(), wizard); // WizardDialog dialog = new WizardDialog(shell, wizard); if (dialog.open() == Window.OK) { // TODO create