--- /dev/null
+ <h1 tal:replace="structure here/manage_page_header">Header</h1>
+ <h2 tal:define="manage_tabs_message options/manage_tabs_message | nothing"
+ tal:replace="structure here/manage_tabs">Tabs</h2>
+ <tal:block tal:define="
+ global user python:here.getUser(request.username);
+ kind python:test(user.isGroup(), 'Group', 'User');
+ icon python:test(user.isGroup(), 'img_group', 'img_user');
+ color python:test(user.isGroup(), here.acl_users.group_color, here.acl_users.user_color);
+ ">
+
+ <br />
+
+ <div class="std-text">
+ <img src="" alt="kind" tal:attributes="src icon; alt kind" align="middle">
+ <strong tal:condition="user/isGroup" tal:content="structure string:${user/asHTML} (Group)">toto group management</strong>
+ <strong tal:condition="not: user/isGroup" tal:content="structure string:${user/asHTML} (User)">toto user management</strong>
+ </div>
+
+
+ <h4>Settings</h4>
+
+ <form action="" method="POST" tal:attributes="action here/absolute_url">
+ <tal:block tal:define="
+ label_groups python:user.getGroups();
+ label_groups_no_recurse python:user.getImmediateGroups();
+ label_groups_recurse python:filter(lambda x: x not in label_groups_no_recurse, label_groups);
+ groups_no_recurse python:map(lambda x: here.getUser(x), label_groups_no_recurse);
+ groups_recurse python:map(lambda x: here.getUser(x), label_groups_recurse);
+ roles python:filter(lambda x: x not in ('Authenticated', 'Shared'), user.getRoles());
+ roles_no_recurse python:filter(lambda x: x not in ('Authenticated', 'Shared'), user.getUserRoles());
+ roles_recurse python:filter(lambda x: x not in roles_no_recurse, roles)
+ ">
+ <ol>
+ <table cellspacing="10">
+ <tr>
+ <!-- User info -->
+ <input type="hidden" name="user" value="" tal:attributes="value user/getUserName">
+ <td valign="top">
+ <table bgcolor="#EEEEEE">
+ <tr>
+ <th class="list-header"><span tal:replace="kind" /> name</th>
+ <td class="list-item">
+ <strong tal:content="structure user/asHTML">
+ </strong>
+ </td>
+ </tr>
+ <tr>
+ <th class="list-header">Member of groups</th>
+ <td class="list-item">
+ <span tal:repeat="group groups_no_recurse" >
+ <span tal:replace="structure group/asHTML"></span><span tal:condition="not:repeat/group/end">, </span>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <th class="list-header">Implicitly member of groups</th>
+ <td class="list-item">
+ <span tal:repeat="group groups_recurse" >
+ <span tal:replace="structure python:group.asHTML(implicit=1)"></span><span tal:condition="not:repeat/group/end">, </span>
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <th class="list-header">Has roles</th>
+ <td class="list-item">
+ <div class="list-item">
+ <span tal:repeat="role roles_no_recurse" >
+ <font color=""
+ tal:attributes="color here/role_color">
+ <span tal:replace="role"></span><span tal:condition="not:repeat/role/end">, </span>
+ </font>
+ </span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th class="list-header">Implicitly has roles (from groups)</th>
+ <td class="list-item">
+ <div class="list-item">
+ <span tal:repeat="role roles_recurse" >
+ <font color=""
+ tal:attributes="color here/role_color">
+ <i><span tal:replace="role"></span></i><span tal:condition="not:repeat/role/end">, </span>
+ </font>
+ </span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4" align="center"><br>
+ <input type="submit" name="changeUser:method" value="Change" />
+ <tal:block tal:replace="nothing">
+ XXX have to make this work again
+
+ <input type="submit" name="deleteUser:method" value="Delete" />
+ <br>
+ </tal:block>
+ </td>
+ </tr>
+ </table>
+ </td>
+
+ <td valign="middle">
+ =>
+ </td>
+
+ <td valign="top">
+ <table bgcolor="#EEEEEE">
+ <tr>
+ <td>
+ <!-- Groups selection -->
+ <table width="100%">
+ <tr class="list-header">
+ <th colspan="2">Set groups</th>
+ </tr>
+
+ <tr tal:repeat="group here/getGroups">
+ <td>
+ <input type="checkbox" name="groups:list" value="" checked=""
+ tal:condition="python: group.getUserName() != user.getUserName()"
+ tal:attributes="
+ value group/getUserName;
+ checked python:test(group.getId() in user.getGroupIds(), '1', '')">
+ </td>
+ <td>
+ <div class="list-item" tal:content="structure group/asHTML"></div>
+ </td>
+ </tr>
+ </table>
+
+ <br>
+
+ <!-- Roles selection -->
+ <table width="100%">
+ <tr class="list-header">
+ <th colspan="2">Set roles</th>
+ </tr>
+
+ <tr tal:repeat="role here/valid_roles">
+ <td tal:condition="python:role not in ('Authenticated', 'Anonymous', 'Shared')">
+ <input type="checkbox" name="roles:list" value="" checked=""
+ tal:attributes="value role; checked python:test(role in user.getUserRoles(), '1', '')">
+ </td>
+ <td tal:condition="python:role not in ('Authenticated', 'Anonymous', 'Shared')">
+ <div class="list-item"><font color="" tal:attributes="color here/role_color" tal:content="role">Role</font></div>
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </ol>
+ </tal:block>
+
+ </form>
+
+
+ <tal:block tal:condition="nothing|user/isGroup">
+ XXX TODO ! XXX
+ <h4>Group contents</h4>
+ <ol>
+ <table bgcolor="#EEEEEE" tal:define="content python:list(user.getImmediateGroups())">
+ <tr class="list-header">
+ <th>Group/User</th>
+ <th class="list-header">Member <br>of groups</th>
+ <th class="list-header">Implicitly <br>member <br>of groups</th>
+ <th class="list-header">Has roles</th>
+ <th class="list-header">Implicitly <br>has roles <br>(from groups)</th>
+ </tr>
+
+ <tr
+ tal:repeat="user python:content" class="" tal:attributes="class python:test(path('repeat/user/odd'), 'row-hilite', 'row-normal')"
+ >
+ <div tal:define="
+ label_groups python:user.getGroups();
+ label_groups_no_recurse python:user.getImmediateGroups();
+ label_groups_recurse python:filter(lambda x: x not in label_groups_no_recurse, label_groups);
+ groups_no_recurse python:map(lambda x: here.getUser(x), label_groups_no_recurse);
+ groups_recurse python:map(lambda x: here.getUser(x), label_groups_recurse);
+ roles python:filter(lambda x: x not in ('Authenticated', 'Shared'), user.getRoles());
+ roles_no_recurse python:filter(lambda x: x not in ('Authenticated', 'Shared'), user.getUserRoles());
+ roles_recurse python:filter(lambda x: x not in roles_no_recurse, roles);"
+ tal:omit-tag="">
+ <td class="list-item">
+ <span tal:repeat="group groups_no_recurse" >
+ <span tal:replace="structure group/asHTML"></span><span tal:condition="not:repeat/group/end">, </span>
+ </span>
+ </td>
+ <td class="list-item">
+ <span tal:repeat="group groups_recurse" >
+ <span tal:replace="structure python:user.asHTML(implicit=1)"></span><span tal:condition="not:repeat/group/end">, </span>
+ </span>
+ </td>
+ <td class="list-item">
+ <div class="list-item">
+ <span tal:repeat="role roles_no_recurse" >
+ <font color=""
+ tal:attributes="color here/role_color">
+ <span tal:replace="role"></span><span tal:condition="not:repeat/role/end">, </span>
+ </font>
+ </span>
+ </div>
+ </td>
+ <td class="list-item">
+ <div class="list-item">
+ <span tal:repeat="role roles_recurse" >
+ <font color=""
+ tal:attributes="color here/role_color">
+ <i><span tal:replace="role"></span></i><span tal:condition="not:repeat/role/end">, </span>
+ </font>
+ </span>
+ </div>
+ </td>
+ </div>
+ </tr>
+ </table>
+ </ol>
+ </tal:block>
+
+
+ <h4>Instructions</h4>
+ <ol>
+ <p class="form-help">
+ To change roles for a <span tal:replace="kind" />,
+ select the roles you want to give it and the groups it belongs to in the forms on the right and click "Change".<br />
+ </p>
+ </ol>
+
+ <h4>Important notice / disclaimer</h4>
+
+ <ol>
+ <p class="form-help">
+ This form uses the regular Zope Security API from the underlying user folders. However, you may experience problems with some
+ of them, especially if they are not tuned to allow user adding. For example, an LDAPUserFolder can be configured to disable
+ users management. In case this form doesn't work, you'll have to do things by hand within the 'Users' and 'Groups' GRUF folders.
+ </p>
+
+ <p class="form-help">
+ This is not a GRUF limitation ! :-)
+ </p>
+ </ol>
+
+ </tal:block>
+
+ <h1 tal:replace="structure here/manage_page_footer">Footer</h1>
+
+