diff --git a/CHANGES.rst b/CHANGES.rst index dd8f4d1c31..1cd97df0b1 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,7 @@ Changelog 2.3.0 (unreleased) ------------------ +- #2117 Customized User/Groups Preferences in Site Configuration - #2115 Fix insufficient privileges for instrument QC viewlet - #2114 Allow Multi Analysis Results Entry - #2111 Replace header table with customizable sample header viewlet diff --git a/src/senaite/core/browser/configure.zcml b/src/senaite/core/browser/configure.zcml index d7b0e22192..05975efd96 100644 --- a/src/senaite/core/browser/configure.zcml +++ b/src/senaite/core/browser/configure.zcml @@ -32,6 +32,7 @@ + diff --git a/src/senaite/core/browser/usergroup/__init__.py b/src/senaite/core/browser/usergroup/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/senaite/core/browser/usergroup/configure.zcml b/src/senaite/core/browser/usergroup/configure.zcml new file mode 100644 index 0000000000..f11845084e --- /dev/null +++ b/src/senaite/core/browser/usergroup/configure.zcml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/senaite/core/browser/usergroup/templates/account-configlet.pt b/src/senaite/core/browser/usergroup/templates/account-configlet.pt new file mode 100644 index 0000000000..0c635c8447 --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/account-configlet.pt @@ -0,0 +1,52 @@ + + +
+ + + +
+ + diff --git a/src/senaite/core/browser/usergroup/templates/usergroups_groupdetails.pt b/src/senaite/core/browser/usergroup/templates/usergroups_groupdetails.pt new file mode 100644 index 0000000000..9231a3dc30 --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/usergroups_groupdetails.pt @@ -0,0 +1,227 @@ + + + + + + + + +
+ + +

Create a Group

+
+ + +
+ + + (Required) + +
+ A unique identifier for the group. Can not be changed after creation. +
+ + +
+
+
+
+ +
+ + + + Up to Groups Overview + + +

Group:

+ +
+ Portal status message +
+ +
+
+ + + +
+ +
+
+ + +
+ +
+ + + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+
+ + +
+
+
+
+
+ +
+ + + diff --git a/src/senaite/core/browser/usergroup/templates/usergroups_groupmembership.pt b/src/senaite/core/browser/usergroup/templates/usergroups_groupmembership.pt new file mode 100644 index 0000000000..6cd4416197 --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/usergroups_groupmembership.pt @@ -0,0 +1,350 @@ + + + + + + +
+ + + Up to Groups Overview + + + +

Group Members

+ +
+ Portal status message +
+ +
+

No group was specified.

+

+ Find a group here +

+
+
+ + + +

Group: groupname

+ +
+ Portal status message +
+ +
+ +
+ + + +

+ You can add or remove groups and users from this particular group here. Note that this + doesn't actually delete the group or user, it is only removed from this group. +

+ +
+

Current group members

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + User nameE-mail Address
+ + + + + + () + + + + + Full Name + + () + + + + + + +
+ + +

+ There is no group or user attached to this group. +

+ + + + + +

+ Search for new group members +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ Quick search +
+
+ + + +
+ + +
+
+
+ + Group/User nameE-mail Address
+ + + + + + Full Name + + () + + + + + + + + () + + + + + + +
No matches + Enter a group or user name to search for. + + Enter a group or user name to search for or click 'Show All'. +
+ + + + + +
+
+
+ + + + + + + + + + +
+
+ + + +
+ +
+ + diff --git a/src/senaite/core/browser/usergroup/templates/usergroups_groupsoverview.pt b/src/senaite/core/browser/usergroup/templates/usergroups_groupsoverview.pt new file mode 100644 index 0000000000..5f5f5517df --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/usergroups_groupsoverview.pt @@ -0,0 +1,269 @@ + + + + + + +
+ + + Site Setup + + +

Users and Groups

+ +
+ Portal status message +
+ +
+ +
+
+ Users + Groups + +
+ +

+ + Groups are logical collections of users, such as + departments and business units. Groups are not directly + related to permissions on a global level, you normally + use Roles for that - and let certain Groups have a + particular role. + + + The symbol + + indicates a role inherited from membership in another group. + +

+ +

+ Note: Some or all of your PAS groups + source plugins do not allow listing of groups, so you + may not see the groups defined by those plugins unless + doing a specific search. +

+ +

+ + + +

+ +
+ + + + + + + +
+ +
+
+ Group Search +
+
+ + + +
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Group Name + + Role + + Remove +
+ + + +   + () + + + + + + + + + +
+ No matches +
+ + + +
+ + + +
+ +
+ + + + + + +
+
+
+ +
+ + diff --git a/src/senaite/core/browser/usergroup/templates/usergroups_usermembership.pt b/src/senaite/core/browser/usergroup/templates/usergroups_usermembership.pt new file mode 100644 index 0000000000..01e662217e --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/usergroups_usermembership.pt @@ -0,0 +1,215 @@ + + + + + + +
+ + + Up to Users Overview + + +

+ + (login name) +

+ +
+ Portal status message +
+ +
+ +
+ + +
+ +

Current group memberships

+ + + + + + + + + + + + + +
Group NameRemove
+ +  group name + + + +
+

This user does not belong to any group.

+ + +

Search for groups

+

Assign to groups

+ + + + + + + + + + + + + + + + + + + +
+ Quick search: + + + + +
+ + Group Name
+ + + + + + groupname not available + + +
+ +
+ + + + + + + + + + + + + + +
+
+
+ +
+ + + diff --git a/src/senaite/core/browser/usergroup/templates/usergroups_usersoverview.pt b/src/senaite/core/browser/usergroup/templates/usergroups_usersoverview.pt new file mode 100644 index 0000000000..8c9d7f9019 --- /dev/null +++ b/src/senaite/core/browser/usergroup/templates/usergroups_usersoverview.pt @@ -0,0 +1,252 @@ + + + + + + +
+ + + Site Setup + + +

Users and Groups

+ +
+ Portal status message +
+ +
+ +
+
+ Users + Groups + +
+ +

+ Note that roles set here apply directly to a user. + The symbol + indicates a role inherited from membership in a group. +

+

+ Note + Some or all of your PAS user source + plugins do not allow listing of users, so you may not see + the users defined by those plugins unless doing a specific + search. +

+

+ + + +

+
+ + +
+
+
+ User Search +
+
+ + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
User nameRoleReset Password
+ + Full Name + login name + + + + + + + + + + + +
No matches + Enter a username to search for + + Enter a username to search for, or click 'Show All' +
+ +
+ + + + + + + +
+ +
+ +
+
+ + + + +
+
+ +
+ +
+ + + diff --git a/src/senaite/core/browser/usergroup/userdatapanel.py b/src/senaite/core/browser/usergroup/userdatapanel.py new file mode 100644 index 0000000000..c34e14eb74 --- /dev/null +++ b/src/senaite/core/browser/usergroup/userdatapanel.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from plone.app.users.browser.userdatapanel import UserDataConfiglet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class UserDataConfiglet(Base): + """Control panel version of the userdata panel + """ + template = ViewPageTemplateFile("templates/account-configlet.pt") diff --git a/src/senaite/core/browser/usergroup/usergroups_groupsoverview.py b/src/senaite/core/browser/usergroup/usergroups_groupsoverview.py new file mode 100644 index 0000000000..faa5993ca8 --- /dev/null +++ b/src/senaite/core/browser/usergroup/usergroups_groupsoverview.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from Acquisition import aq_inner +from Products.CMFCore.utils import getToolByName +from Products.CMFPlone.controlpanel.browser.usergroups_groupsoverview import \ + GroupsOverviewControlPanel as BaseView +from senaite.core.config.roles import HIDDEN_ROLES + + +class GroupsOverviewControlPanel(BaseView): + """Custom userprefs controlpanel + """ + + @property + def portal_roles(self): + """Return only SENAITE Roles + """ + pmemb = getToolByName(aq_inner(self.context), "portal_membership") + roles = pmemb.getPortalRoles() + return filter(lambda r: r not in HIDDEN_ROLES, roles) diff --git a/src/senaite/core/browser/usergroup/usergroups_usersoverview.py b/src/senaite/core/browser/usergroup/usergroups_usersoverview.py new file mode 100644 index 0000000000..7b052cce44 --- /dev/null +++ b/src/senaite/core/browser/usergroup/usergroups_usersoverview.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from Acquisition import aq_inner +from Products.CMFCore.utils import getToolByName +from Products.CMFPlone.controlpanel.browser.usergroups_usersoverview import \ + UsersOverviewControlPanel as BaseView +from senaite.core.config.roles import HIDDEN_ROLES + + +class UsersOverviewControlPanel(BaseView): + """Custom userprefs controlpanel + """ + + @property + def portal_roles(self): + """Return only SENAITE Roles + """ + pmemb = getToolByName(aq_inner(self.context), "portal_membership") + roles = pmemb.getPortalRoles() + return filter(lambda r: r not in HIDDEN_ROLES, roles) diff --git a/src/senaite/core/config/roles.py b/src/senaite/core/config/roles.py new file mode 100644 index 0000000000..0cbf7c2eca --- /dev/null +++ b/src/senaite/core/config/roles.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +HIDDEN_ROLES = [ + "Owner", + "ClientGuest", + "Contributor", + "Editor", + "Member", + "Reader", + "Reviewer", + "Site Administrator", +] diff --git a/src/senaite/core/skins/senaite_images/site_icon.png b/src/senaite/core/skins/senaite_images/site_icon.png new file mode 100644 index 0000000000..ef82df3458 Binary files /dev/null and b/src/senaite/core/skins/senaite_images/site_icon.png differ