Navigation: Add list facet menu

Add the new list facet navigation menu. Used to provide facets
to the list subtemplate. The list facet allows separating the object
action links from the object navigation links. The list facet
links are displayed before the list object links on the list
subtemplate. In the object views, the list facet menu behaves
exactly the same as the form facet menu.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-11-29 04:17:53 -04:00
parent 52bbf62e26
commit abfc8b0c09
38 changed files with 256 additions and 137 deletions

View File

@@ -103,6 +103,8 @@
The settings WORKFLOWS_IMAGE_CACHE_TIME, The settings WORKFLOWS_IMAGE_CACHE_TIME,
WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND, WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND,
WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND_ARGUMENTS we added. WORKFLOWS_IMAGE_CACHE_STORAGE_BACKEND_ARGUMENTS we added.
- Added new list facet navigation menu. Used to provide facets
to the setup menu items.
3.1.9 (2018-11-01) 3.1.9 (2018-11-01)

View File

@@ -38,7 +38,7 @@
</div> </div>
{% get_menus_links names='object menu,sidebar menu,secondary menu' sort_results=True as links %} {% get_menus_links names='object menu,sidebar menu,secondary menu' sort_results=True as links %}
{% get_menu_links 'object facet' sort_results=True as form_navigation_links %} {% get_menus_links names='object facet,object list facet' sort_results=True as form_navigation_links %}
<div class="row"> <div class="row">
{% if links or form_navigation_links %} {% if links or form_navigation_links %}

View File

@@ -96,6 +96,14 @@
{% endfor %} {% endfor %}
{% if not hide_links %} {% if not hide_links %}
<td class="last"> <td class="last">
{% get_menu_links 'object list facet' sort_results=True source=object as resolved_links %}
{% for object_navigation_links in resolved_links %}
{% with 'true' as horizontal %}
{% with 'true' as hide_icon %}
{% include 'navigation/generic_navigation.html' %}
{% endwith %}
{% endwith %}
{% endfor %}
{% get_menu_links 'object menu' source=object as resolved_links %} {% get_menu_links 'object menu' source=object as resolved_links %}
{% for object_navigation_links in resolved_links %} {% for object_navigation_links in resolved_links %}
{% with 'true' as horizontal %} {% with 'true' as horizontal %}

View File

@@ -4,10 +4,10 @@
<li class="text-center link-text-span" >{{ link.text }}</li> <li class="text-center link-text-span" >{{ link.text }}</li>
{% else %} {% else %}
{% if link.disabled %} {% if link.disabled %}
<a class="{{ link.html_extra_classes }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %} disabled" disabled='disabled' style="cursor: default;" href="#">{% if link.icon %}<i class="hidden-xs hidden-sm hidden-md {{ link.icon }}"></i>{% endif %}{% if link.icon_class %}{{ link.icon_class.render }}{% endif %} {{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}</a>{% if horizontal %}{% if not forloop.last %}&nbsp;{% endif %}{% endif %} <a class="{{ link.html_extra_classes|default:'' }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %} disabled" disabled='disabled' style="cursor: default;" href="#">{% if link.icon %}<i class="hidden-xs hidden-sm hidden-md {{ link.icon }}"></i>{% endif %}{% if link.icon_class %}{{ link.icon_class.render }}{% endif %} {{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}</a>{% if horizontal %}{% if not forloop.last %}&nbsp;{% endif %}{% endif %}
{% else %} {% else %}
<a <a
class="{{ link.html_extra_classes }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %}" class="{{ link.html_extra_classes|default:'' }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %}"
{% for key,value in link.html_data.items %} {% for key,value in link.html_data.items %}
data-{{ key }}={{ value }} data-{{ key }}={{ value }}
{% endfor %} {% endfor %}

View File

@@ -1,5 +1,6 @@
{% load i18n %} {% load i18n %}
{% spaceless %}
{% if as_dropdown %} {% if as_dropdown %}
<div class="dropdown text-center"> <div class="dropdown text-center">
<button class="btn btn-default dropdown-toggle btn-danger btn-sm" type="button" id="dropdownMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button class="btn btn-default dropdown-toggle btn-danger btn-sm" type="button" id="dropdownMenu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@@ -23,3 +24,4 @@
{% include 'navigation/generic_subnavigation.html' %} {% include 'navigation/generic_subnavigation.html' %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endspaceless %}

View File

@@ -7,17 +7,19 @@ from navigation import Menu
from .icons import icon_menu_about, icon_menu_user from .icons import icon_menu_about, icon_menu_user
__all__ = ( __all__ = (
'menu_about', 'menu_facet', 'menu_object', 'menu_main', 'menu_multi_item', 'menu_about', 'menu_facet', 'menu_list_facet', 'menu_main', 'menu_object',
'menu_secondary', 'menu_setup', 'menu_sidebar', 'menu_tools', 'menu_user' 'menu_multi_item', 'menu_secondary', 'menu_setup', 'menu_sidebar',
'menu_tools', 'menu_user'
) )
menu_about = Menu( menu_about = Menu(
icon_class=icon_menu_about, label=_('System'), name='about menu' icon_class=icon_menu_about, label=_('System'), name='about menu'
) )
menu_facet = Menu(name='object facet') menu_facet = Menu(name='object facet')
menu_object = Menu(name='object menu') menu_list_facet = Menu(name='object list facet')
menu_main = Menu(name='main menu') menu_main = Menu(name='main menu')
menu_multi_item = Menu(name='multi item menu') menu_multi_item = Menu(name='multi item menu')
menu_object = Menu(name='object menu')
menu_secondary = Menu(name='secondary menu') menu_secondary = Menu(name='secondary menu')
menu_setup = Menu(name='setup menu') menu_setup = Menu(name='setup menu')
menu_sidebar = Menu(name='sidebar menu') menu_sidebar = Menu(name='sidebar menu')

View File

@@ -11,8 +11,8 @@ from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary, MayanAppConfig, menu_facet, menu_list_facet, menu_main, menu_object,
menu_setup, menu_tools menu_secondary, menu_setup, menu_tools
) )
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
from documents.signals import post_document_created, post_initial_document_type from documents.signals import post_document_created, post_initial_document_type
@@ -182,11 +182,15 @@ class DocumentIndexingApp(MayanAppConfig):
menu_facet.bind_links( menu_facet.bind_links(
links=(link_document_index_list,), sources=(Document,) links=(link_document_index_list,), sources=(Document,)
) )
menu_list_facet.bind_links(
links=(
link_acl_list, link_index_setup_document_types,
link_index_setup_view,
), sources=(Index,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_index_setup_edit, link_index_setup_view, link_index_setup_edit, link_index_setup_delete
link_index_setup_document_types, link_acl_list,
link_index_setup_delete
), sources=(Index,) ), sources=(Index,)
) )
menu_object.bind_links( menu_object.bind_links(

View File

@@ -8,6 +8,7 @@ icon_index_level_up = Icon(
) )
icon_index = Icon(driver_name='fontawesome', symbol='list-ul') icon_index = Icon(driver_name='fontawesome', symbol='list-ul')
icon_index_create = Icon(driver_name='fontawesome', symbol='plus') icon_index_create = Icon(driver_name='fontawesome', symbol='plus')
icon_index_setup_view = Icon(driver_name='fontawesome', symbol='folder-open')
icon_node_with_documents = Icon(driver_name='fontawesome', symbol='folder') icon_node_with_documents = Icon(driver_name='fontawesome', symbol='folder')
icon_rebuild_index_instances = Icon( icon_rebuild_index_instances = Icon(
driver_name='fontawesome', symbol='list-ul' driver_name='fontawesome', symbol='list-ul'

View File

@@ -4,9 +4,11 @@ from django.utils.translation import ugettext_lazy as _
from navigation import Link, get_cascade_condition from navigation import Link, get_cascade_condition
from documents.icons import icon_document_type
from .icons import ( from .icons import (
icon_document_index_list, icon_index, icon_index_create, icon_document_index_list, icon_index, icon_index_create,
icon_rebuild_index_instances, icon_index_setup_view, icon_rebuild_index_instances,
) )
from .permissions import ( from .permissions import (
permission_document_indexing_create, permission_document_indexing_edit, permission_document_indexing_create, permission_document_indexing_edit,
@@ -58,12 +60,12 @@ link_index_setup_delete = Link(
text=_('Delete'), view='indexing:index_setup_delete', text=_('Delete'), view='indexing:index_setup_delete',
) )
link_index_setup_view = Link( link_index_setup_view = Link(
args='resolved_object.pk', args='resolved_object.pk', icon_class=icon_index_setup_view,
permissions=(permission_document_indexing_edit,), text=_('Tree template'), permissions=(permission_document_indexing_edit,), text=_('Tree template'),
view='indexing:index_setup_view', view='indexing:index_setup_view',
) )
link_index_setup_document_types = Link( link_index_setup_document_types = Link(
args='resolved_object.pk', args='resolved_object.pk', icon_class=icon_document_type,
permissions=(permission_document_indexing_edit,), text=_('Document types'), permissions=(permission_document_indexing_edit,), text=_('Document types'),
view='indexing:index_setup_document_types', view='indexing:index_setup_document_types',
) )

View File

@@ -9,8 +9,8 @@ from kombu import Exchange, Queue
from acls import ModelPermission from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from common import ( from common import (
MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary, MayanAppConfig, menu_facet, menu_list_facet, menu_main, menu_object,
menu_setup, menu_sidebar, menu_tools menu_secondary, menu_setup, menu_sidebar, menu_tools
) )
from common.classes import ModelAttribute from common.classes import ModelAttribute
from common.links import link_object_error_list from common.links import link_object_error_list
@@ -271,12 +271,17 @@ class DocumentStatesApp(MayanAppConfig):
menu_facet.bind_links( menu_facet.bind_links(
links=(link_document_workflow_instance_list,), sources=(Document,) links=(link_document_workflow_instance_list,), sources=(Document,)
) )
menu_list_facet.bind_links(
links=(
link_setup_workflow_document_types,
link_setup_workflow_states, link_setup_workflow_transitions,
link_workflow_preview, link_acl_list
), sources=(Workflow,)
)
menu_main.bind_links(links=(link_workflow_list,), position=10) menu_main.bind_links(links=(link_workflow_list,), position=10)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_setup_workflow_states, link_setup_workflow_transitions, link_setup_workflow_edit,
link_setup_workflow_document_types, link_setup_workflow_edit,
link_acl_list, link_workflow_preview,
link_setup_workflow_delete link_setup_workflow_delete
), sources=(Workflow,) ), sources=(Workflow,)
) )
@@ -338,11 +343,21 @@ class DocumentStatesApp(MayanAppConfig):
) )
) )
menu_setup.bind_links(links=(link_setup_workflow_list,)) menu_setup.bind_links(links=(link_setup_workflow_list,))
menu_sidebar.bind_links(
links=(
link_setup_workflow_transition_create,
), sources=(
WorkflowTransition,
'document_states:setup_workflow_transition_list',
)
)
menu_sidebar.bind_links( menu_sidebar.bind_links(
links=( links=(
link_setup_workflow_state_create, link_setup_workflow_state_create,
link_setup_workflow_transition_create ), sources=(
), sources=(Workflow,) WorkflowState,
'document_states:setup_workflow_state_list',
)
) )
menu_tools.bind_links(links=(link_tool_launch_all_workflows,)) menu_tools.bind_links(links=(link_tool_launch_all_workflows,))

View File

@@ -9,18 +9,11 @@ icon_setup_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap')
icon_tool_launch_all_workflows = Icon( icon_tool_launch_all_workflows = Icon(
driver_name='fontawesome', symbol='sitemap' driver_name='fontawesome', symbol='sitemap'
) )
icon_workflow_create = Icon( icon_workflow_create = Icon(driver_name='fontawesome', symbol='plus')
driver_name='fontawesome', symbol='plus' icon_workflow_list = Icon(driver_name='fontawesome', symbol='sitemap')
) icon_workflow_preview = Icon(driver_name='fontawesome', symbol='eye')
icon_workflow_list = Icon( icon_workflow_state = Icon(driver_name='fontawesome', symbol='circle')
driver_name='fontawesome', symbol='sitemap' icon_workflow_state_action = Icon(driver_name='fontawesome', symbol='code')
)
icon_workflow_state = Icon(
driver_name='fontawesome', symbol='circle'
)
icon_workflow_state_action = Icon(
driver_name='fontawesome', symbol='code'
)
icon_workflow_transition = Icon( icon_workflow_transition = Icon(
driver_name='fontawesome', symbol='arrows-alt-h' driver_name='fontawesome', symbol='arrows-alt-h'
) )

View File

@@ -2,12 +2,14 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.icons import icon_document_type
from navigation import Link from navigation import Link
from .icons import ( from .icons import (
icon_document_workflow_instance_list, icon_setup_workflow_list, icon_document_workflow_instance_list, icon_setup_workflow_list,
icon_tool_launch_all_workflows, icon_workflow_create, icon_workflow_list, icon_tool_launch_all_workflows, icon_workflow_create, icon_workflow_list,
icon_workflow_state, icon_workflow_state_action, icon_workflow_transition icon_workflow_preview, icon_workflow_state, icon_workflow_state_action,
icon_workflow_transition
) )
from .permissions import ( from .permissions import (
permission_workflow_create, permission_workflow_delete, permission_workflow_create, permission_workflow_delete,
@@ -30,7 +32,7 @@ link_setup_workflow_delete = Link(
view='document_states:setup_workflow_delete', view='document_states:setup_workflow_delete',
) )
link_setup_workflow_document_types = Link( link_setup_workflow_document_types = Link(
args='resolved_object.pk', args='resolved_object.pk', icon_class=icon_document_type,
permissions=(permission_workflow_edit,), text=_('Document types'), permissions=(permission_workflow_edit,), text=_('Document types'),
view='document_states:setup_workflow_document_types', view='document_states:setup_workflow_document_types',
) )
@@ -138,6 +140,7 @@ link_workflow_instance_transition_events = Link(
view='document_states:setup_workflow_transition_events' view='document_states:setup_workflow_transition_events'
) )
link_workflow_preview = Link( link_workflow_preview = Link(
args='resolved_object.pk', permissions=(permission_workflow_view,), args='resolved_object.pk', icon_class=icon_workflow_preview,
text=_('Preview'), view='document_states:workflow_preview' permissions=(permission_workflow_view,), text=_('Preview'),
view='document_states:workflow_preview'
) )

View File

@@ -11,8 +11,9 @@ from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, MissingItem, menu_facet, menu_main, menu_object, MayanAppConfig, MissingItem, menu_facet, menu_list_facet, menu_main,
menu_secondary, menu_setup, menu_sidebar, menu_multi_item, menu_tools menu_object, menu_secondary, menu_setup, menu_sidebar, menu_multi_item,
menu_tools
) )
from common.classes import ModelField, Template from common.classes import ModelField, Template
from common.dashboards import dashboard_main from common.dashboards import dashboard_main
@@ -446,12 +447,16 @@ class DocumentsApp(MayanAppConfig):
) )
# Document type links # Document type links
menu_list_facet.bind_links(
links=(
link_document_type_filename_list,
link_acl_list, link_object_event_types_user_subcriptions_list,
link_events_for_object,
), sources=(DocumentType,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_document_type_edit, link_document_type_filename_list, link_document_type_edit, link_document_type_delete,
link_acl_list, link_object_event_types_user_subcriptions_list,
link_document_type_delete,
link_events_for_object,
), sources=(DocumentType,) ), sources=(DocumentType,)
) )
menu_object.bind_links( menu_object.bind_links(

View File

@@ -67,6 +67,7 @@ icon_document_page_zoom_out = Icon(
icon_document_pages = Icon(driver_name='fontawesome', symbol='copy') icon_document_pages = Icon(driver_name='fontawesome', symbol='copy')
icon_document_preview = Icon(driver_name='fontawesome', symbol='eye') icon_document_preview = Icon(driver_name='fontawesome', symbol='eye')
icon_document_properties = Icon(driver_name='fontawesome', symbol='info') icon_document_properties = Icon(driver_name='fontawesome', symbol='info')
icon_document_type = Icon(driver_name='fontawesome', symbol='file')
icon_document_type_create = Icon(driver_name='fontawesome', symbol='plus') icon_document_type_create = Icon(driver_name='fontawesome', symbol='plus')
icon_document_type_delete = Icon(driver_name='fontawesome', symbol='times') icon_document_type_delete = Icon(driver_name='fontawesome', symbol='times')
icon_document_type_edit = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_document_type_edit = Icon(driver_name='fontawesome', symbol='pencil-alt')

View File

@@ -19,10 +19,10 @@ from .icons import (
icon_document_page_zoom_out, icon_document_pages, icon_document_preview, icon_document_page_zoom_out, icon_document_pages, icon_document_preview,
icon_document_properties, icon_document_type_create, icon_document_properties, icon_document_type_create,
icon_document_type_delete, icon_document_type_edit, icon_document_type_delete, icon_document_type_edit,
icon_document_type_filename_create, icon_document_type_setup, icon_document_type_filename, icon_document_type_filename_create,
icon_document_version_list, icon_document_version_return_document, icon_document_type_setup, icon_document_version_list,
icon_document_version_return_list, icon_duplicated_document_list, icon_document_version_return_document, icon_document_version_return_list,
icon_duplicated_document_scan icon_duplicated_document_list, icon_duplicated_document_scan
) )
from .permissions import ( from .permissions import (
permission_document_delete, permission_document_download, permission_document_delete, permission_document_download,
@@ -348,8 +348,9 @@ link_document_type_filename_edit = Link(
text=_('Edit'), view='documents:document_type_filename_edit', text=_('Edit'), view='documents:document_type_filename_edit',
) )
link_document_type_filename_list = Link( link_document_type_filename_list = Link(
args='resolved_object.id', permissions=(permission_document_type_view,), args='resolved_object.id', icon_class=icon_document_type_filename,
text=_('Quick labels'), view='documents:document_type_filename_list', permissions=(permission_document_type_view,), text=_('Quick labels'),
view='documents:document_type_filename_list',
) )
link_document_type_list = Link( link_document_type_list = Link(
permissions=(permission_document_type_view,), text=_('Document types'), permissions=(permission_document_type_view,), text=_('Document types'),

View File

@@ -5,8 +5,8 @@ from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import ( from common import (
MayanAppConfig, menu_main, menu_object, menu_secondary, menu_tools, MayanAppConfig, menu_list_facet, menu_main, menu_object, menu_secondary,
menu_user menu_tools, menu_user
) )
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
from navigation import SourceColumn from navigation import SourceColumn
@@ -80,15 +80,15 @@ class EventsApp(MayanAppConfig):
).render() ).render()
) )
menu_list_facet.bind_links(
links=(link_user_events,), sources=(User,)
)
menu_main.bind_links( menu_main.bind_links(
links=(link_user_notifications_list,), position=99 links=(link_user_notifications_list,), position=99
) )
menu_object.bind_links( menu_object.bind_links(
links=(link_notification_mark_read,), sources=(Notification,) links=(link_notification_mark_read,), sources=(Notification,)
) )
menu_object.bind_links(
links=(link_user_events,), sources=(User,)
)
menu_secondary.bind_links( menu_secondary.bind_links(
links=(link_notification_mark_read_all,), links=(link_notification_mark_read_all,),
sources=('events:user_notifications_list',) sources=('events:user_notifications_list',)

View File

@@ -7,7 +7,7 @@ icon_event_types_subscriptions_list = Icon(
) )
icon_events_list = Icon(driver_name='fontawesome', symbol='list-ol') icon_events_list = Icon(driver_name='fontawesome', symbol='list-ol')
icon_events_for_object = Icon(driver_name='fontawesome', symbol='list-ol') icon_events_for_object = Icon(driver_name='fontawesome', symbol='list-ol')
icon_events_user_list = Icon(driver_name='fontawesome', symbol='rss') icon_events_user_list = Icon(driver_name='fontawesome', symbol='list-ol')
icon_object_event_types_user_subcriptions_list = Icon( icon_object_event_types_user_subcriptions_list = Icon(
driver_name='fontawesome', symbol='rss' driver_name='fontawesome', symbol='rss'
) )

View File

@@ -8,7 +8,7 @@ from navigation import Link
from .icons import ( from .icons import (
icon_events_list, icon_events_for_object, icon_events_list, icon_events_for_object,
icon_event_types_subscriptions_list, icon_event_types_subscriptions_list,
icon_object_event_types_user_subcriptions_list, icon_events_user_list, icon_object_event_types_user_subcriptions_list,
icon_user_notifications_list icon_user_notifications_list
) )
from .permissions import permission_events_view from .permissions import permission_events_view
@@ -68,8 +68,8 @@ link_object_event_types_user_subcriptions_list = Link(
view='events:object_event_types_user_subcriptions_list', view='events:object_event_types_user_subcriptions_list',
) )
link_user_events = Link( link_user_events = Link(
args='resolved_object.pk', text=_('User events'), args='resolved_object.pk', icon_class=icon_events_user_list,
view='events:user_events' text=_('User events'), view='events:user_events'
) )
link_user_notifications_list = Link( link_user_notifications_list = Link(
html_data={ html_data={

View File

@@ -7,8 +7,8 @@ from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_facet, menu_object, menu_secondary, menu_setup, MayanAppConfig, menu_facet, menu_list_facet, menu_object, menu_secondary,
menu_sidebar menu_setup, menu_sidebar
) )
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
from navigation import SourceColumn from navigation import SourceColumn
@@ -81,6 +81,12 @@ class LinkingApp(MayanAppConfig):
links=(link_smart_link_instances_for_document,), links=(link_smart_link_instances_for_document,),
sources=(Document,) sources=(Document,)
) )
menu_list_facet.bind_links(
links=(
link_acl_list, link_smart_link_document_types,
link_smart_link_condition_list,
), sources=(SmartLink,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_smart_link_condition_edit, link_smart_link_condition_edit,
@@ -89,9 +95,7 @@ class LinkingApp(MayanAppConfig):
) )
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_smart_link_edit, link_smart_link_document_types, link_smart_link_edit, link_smart_link_delete
link_smart_link_condition_list, link_acl_list,
link_smart_link_delete
), sources=(SmartLink,) ), sources=(SmartLink,)
) )
menu_object.bind_links( menu_object.bind_links(

View File

@@ -2,12 +2,14 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.icons import icon_document_type
from documents.permissions import permission_document_view from documents.permissions import permission_document_view
from navigation import Link from navigation import Link
from .icons import ( from .icons import (
icon_smart_link_condition_create, icon_smart_link_create, icon_smart_link_condition, icon_smart_link_condition_create,
icon_smart_link_instances_for_document, icon_smart_link_setup icon_smart_link_create, icon_smart_link_instances_for_document,
icon_smart_link_setup
) )
from .permissions import ( from .permissions import (
permission_smart_link_create, permission_smart_link_delete, permission_smart_link_create, permission_smart_link_delete,
@@ -29,8 +31,9 @@ link_smart_link_condition_edit = Link(
text=_('Edit'), view='linking:smart_link_condition_edit', text=_('Edit'), view='linking:smart_link_condition_edit',
) )
link_smart_link_condition_list = Link( link_smart_link_condition_list = Link(
args='object.pk', permissions=(permission_smart_link_edit,), args='object.pk', icon_class=icon_smart_link_condition,
text=_('Conditions'), view='linking:smart_link_condition_list', permissions=(permission_smart_link_edit,), text=_('Conditions'),
view='linking:smart_link_condition_list',
) )
link_smart_link_create = Link( link_smart_link_create = Link(
icon_class=icon_smart_link_create, icon_class=icon_smart_link_create,
@@ -42,8 +45,9 @@ link_smart_link_delete = Link(
tags='dangerous', text=_('Delete'), view='linking:smart_link_delete', tags='dangerous', text=_('Delete'), view='linking:smart_link_delete',
) )
link_smart_link_document_types = Link( link_smart_link_document_types = Link(
args='object.pk', permissions=(permission_smart_link_edit,), args='object.pk', icon_class=icon_document_type,
text=_('Document types'), view='linking:smart_link_document_types', permissions=(permission_smart_link_edit,), text=_('Document types'),
view='linking:smart_link_document_types',
) )
link_smart_link_edit = Link( link_smart_link_edit = Link(
args='object.pk', permissions=(permission_smart_link_edit,), args='object.pk', permissions=(permission_smart_link_edit,),

View File

@@ -9,8 +9,8 @@ from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_object, menu_multi_item, menu_secondary, menu_setup, MayanAppConfig, menu_list_facet, menu_object, menu_multi_item,
menu_tools menu_secondary, menu_setup, menu_tools
) )
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
from mayan.celery import app from mayan.celery import app
@@ -100,6 +100,12 @@ class MailerApp(MayanAppConfig):
} }
) )
menu_list_facet.bind_links(
links=(
link_acl_list, link_user_mailer_log_list,
), sources=(UserMailer,)
)
menu_multi_item.bind_links( menu_multi_item.bind_links(
links=( links=(
link_send_multiple_document, link_send_multiple_document_link link_send_multiple_document, link_send_multiple_document_link
@@ -114,17 +120,18 @@ class MailerApp(MayanAppConfig):
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_user_mailer_edit, link_user_mailer_log_list, link_user_mailer_edit, link_user_mailer_test,
link_user_mailer_test, link_acl_list, link_user_mailer_delete, link_user_mailer_delete,
), sources=(UserMailer,) ), sources=(UserMailer,)
) )
menu_secondary.bind_links( menu_secondary.bind_links(
links=( links=(
link_user_mailer_list, link_user_mailer_create, link_user_mailer_create, link_user_mailer_list,
), sources=( ), sources=(
UserMailer, 'mailer:user_mailer_list', UserMailer, 'mailer:user_mailer_list',
'mailer:user_mailer_create' 'mailer:user_mailer_backend_selection',
'mailer:user_mailer_create',
) )
) )

View File

@@ -205,7 +205,7 @@ class UserMailerLogEntryListView(SingleObjectListView):
return { return {
'hide_object': True, 'hide_object': True,
'object': self.get_user_mailer(), 'object': self.get_user_mailer(),
'title': _('%s error log') % self.get_user_mailer(), 'title': _('Error log for mailing profile: %s') % self.get_user_mailer(),
} }
def get_object_list(self): def get_object_list(self):

View File

@@ -12,8 +12,8 @@ from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_facet, menu_multi_item, menu_object, menu_secondary, MayanAppConfig, menu_facet, menu_list_facet, menu_multi_item, menu_object,
menu_setup, menu_sidebar menu_secondary, menu_setup, menu_sidebar
) )
from common.classes import ModelAttribute, ModelField from common.classes import ModelAttribute, ModelField
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
@@ -201,23 +201,28 @@ class MetadataApp(MayanAppConfig):
) )
menu_facet.bind_links(links=(link_metadata_view,), sources=(Document,)) menu_facet.bind_links(links=(link_metadata_view,), sources=(Document,))
menu_list_facet.bind_links(
links=(
link_setup_document_type_metadata_types,
), sources=(DocumentType,)
)
menu_list_facet.bind_links(
links=(
link_acl_list, link_setup_metadata_type_document_types,
link_object_event_types_user_subcriptions_list,
link_events_for_object,
), sources=(MetadataType,)
)
menu_multi_item.bind_links( menu_multi_item.bind_links(
links=( links=(
link_metadata_multiple_add, link_metadata_multiple_edit, link_metadata_multiple_add, link_metadata_multiple_edit,
link_metadata_multiple_remove link_metadata_multiple_remove
), sources=(Document,) ), sources=(Document,)
) )
menu_object.bind_links(
links=(
link_setup_document_type_metadata_types,
), sources=(DocumentType,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_setup_metadata_type_edit, link_setup_metadata_type_edit,
link_setup_metadata_type_document_types, link_acl_list, link_setup_metadata_type_delete,
link_object_event_types_user_subcriptions_list,
link_events_for_object, link_setup_metadata_type_delete,
), sources=(MetadataType,) ), sources=(MetadataType,)
) )
menu_secondary.bind_links( menu_secondary.bind_links(

View File

@@ -13,4 +13,5 @@ icon_document_metadata_remove = Icon(
) )
icon_metadata = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_metadata = Icon(driver_name='fontawesome', symbol='pencil-alt')
icon_metadata_type_create = Icon(driver_name='fontawesome', symbol='plus') icon_metadata_type_create = Icon(driver_name='fontawesome', symbol='plus')
icon_metadata_type = Icon(driver_name='fontawesome', symbol='pencil-alt')
icon_metadata_view = Icon(driver_name='fontawesome', symbol='pencil-alt') icon_metadata_view = Icon(driver_name='fontawesome', symbol='pencil-alt')

View File

@@ -2,11 +2,13 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.icons import icon_document_type
from documents.permissions import permission_document_type_edit from documents.permissions import permission_document_type_edit
from navigation import Link from navigation import Link
from .icons import ( from .icons import (
icon_document_metadata_add, icon_metadata_view, icon_metadata_type_create icon_document_metadata_add, icon_metadata_type, icon_metadata_view,
icon_metadata_type_create
) )
from .permissions import ( from .permissions import (
permission_metadata_document_add, permission_metadata_document_edit, permission_metadata_document_add, permission_metadata_document_edit,
@@ -43,12 +45,14 @@ link_metadata_view = Link(
view='metadata:metadata_view', view='metadata:metadata_view',
) )
link_setup_document_type_metadata_types = Link( link_setup_document_type_metadata_types = Link(
args='resolved_object.pk', permissions=(permission_document_type_edit,), args='resolved_object.pk', icon_class=icon_metadata_type,
text=_('Metadata types'), view='metadata:setup_document_type_metadata_types', permissions=(permission_document_type_edit,), text=_('Metadata types'),
view='metadata:setup_document_type_metadata_types',
) )
link_setup_metadata_type_document_types = Link( link_setup_metadata_type_document_types = Link(
args='resolved_object.pk', permissions=(permission_document_type_edit,), args='resolved_object.pk', icon_class=icon_document_type,
text=_('Document types'), view='metadata:setup_metadata_type_document_types', permissions=(permission_document_type_edit,), text=_('Document types'),
view='metadata:setup_metadata_type_document_types',
) )
link_setup_metadata_type_create = Link( link_setup_metadata_type_create = Link(
icon_class=icon_metadata_type_create, icon_class=icon_metadata_type_create,

View File

@@ -7,7 +7,9 @@ from django.utils.translation import ugettext_lazy as _
from acls import ModelPermission from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import MayanAppConfig, menu_object, menu_secondary, menu_setup from common import (
MayanAppConfig, menu_list_facet, menu_object, menu_secondary, menu_setup
)
from navigation import SourceColumn from navigation import SourceColumn
from .links import ( from .links import (
@@ -51,13 +53,18 @@ class MOTDApp(MayanAppConfig):
func=lambda context: context['object'].end_datetime or _('None') func=lambda context: context['object'].end_datetime or _('None')
) )
menu_list_facet.bind_links(
links=(
link_acl_list,
), sources=(Message,)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_message_edit, link_acl_list, link_message_delete link_message_edit, link_message_delete
), sources=(Message,) ), sources=(Message,)
) )
menu_secondary.bind_links( menu_secondary.bind_links(
links=(link_message_create,), links=(link_message_create, link_message_list),
sources=(Message, 'motd:message_list', 'motd:message_create') sources=(Message, 'motd:message_list', 'motd:message_create')
) )
menu_setup.bind_links( menu_setup.bind_links(

View File

@@ -8,7 +8,8 @@ from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_multi_item, menu_object, menu_secondary, menu_setup MayanAppConfig, menu_list_facet, menu_multi_item, menu_object,
menu_secondary, menu_setup
) )
from common.signals import perform_upgrade from common.signals import perform_upgrade
@@ -46,13 +47,17 @@ class PermissionsApp(MayanAppConfig):
) )
) )
menu_object.bind_links( menu_list_facet.bind_links(
links=(link_group_roles,), position=98, sources=(Group,) links=(
link_acl_list, link_role_groups, link_role_permissions,
), sources=(Role,)
)
menu_list_facet.bind_links(
links=(link_group_roles,), sources=(Group,)
) )
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_role_edit, link_role_groups, link_role_permissions, link_role_edit, link_role_delete
link_acl_list, link_role_delete
), sources=(Role,) ), sources=(Role,)
) )
menu_multi_item.bind_links( menu_multi_item.bind_links(

View File

@@ -2,5 +2,6 @@ from __future__ import absolute_import, unicode_literals
from appearance.classes import Icon from appearance.classes import Icon
icon_permission = Icon(driver_name='fontawesome', symbol='thumbs-up')
icon_role_create = Icon(driver_name='fontawesome', symbol='plus') icon_role_create = Icon(driver_name='fontawesome', symbol='plus')
icon_role_list = Icon(driver_name='fontawesome', symbol='user-secret') icon_role_list = Icon(driver_name='fontawesome', symbol='user-secret')

View File

@@ -3,9 +3,10 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation import Link from navigation import Link
from user_management.icons import icon_group
from user_management.permissions import permission_group_edit from user_management.permissions import permission_group_edit
from .icons import icon_role_create, icon_role_list from .icons import icon_permission, icon_role_create, icon_role_list
from .permissions import ( from .permissions import (
permission_permission_grant, permission_permission_revoke, permission_permission_grant, permission_permission_revoke,
permission_role_create, permission_role_delete, permission_role_edit, permission_role_create, permission_role_delete, permission_role_edit,
@@ -13,7 +14,8 @@ from .permissions import (
) )
link_group_roles = Link( link_group_roles = Link(
args='object.id', permissions=(permission_group_edit,), text=_('Roles'), args='object.id', icon_class=icon_role_list,
permissions=(permission_group_edit,), text=_('Roles'),
view='permissions:group_roles', view='permissions:group_roles',
) )
link_permission_grant = Link( link_permission_grant = Link(
@@ -41,11 +43,12 @@ link_role_list = Link(
text=_('Roles'), view='permissions:role_list' text=_('Roles'), view='permissions:role_list'
) )
link_role_groups = Link( link_role_groups = Link(
args='object.id', permissions=(permission_role_edit,), text=_('Groups'), args='object.id', icon_class=icon_group,
permissions=(permission_role_edit,), text=_('Groups'),
view='permissions:role_groups', view='permissions:role_groups',
) )
link_role_permissions = Link( link_role_permissions = Link(
args='object.id', args='object.id', icon_class=icon_permission,
permissions=(permission_permission_grant, permission_permission_revoke), permissions=(permission_permission_grant, permission_permission_revoke),
text=_('Role permissions'), view='permissions:role_permissions', text=_('Role permissions'), view='permissions:role_permissions',
) )

View File

@@ -2,7 +2,10 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from common import MayanAppConfig, menu_facet, menu_setup, menu_object from common import (
MayanAppConfig, menu_facet, menu_list_facet, menu_setup,
menu_object, menu_secondary
)
from navigation import SourceColumn from navigation import SourceColumn
from .classes import Namespace, Setting from .classes import Namespace, Setting
@@ -41,7 +44,7 @@ class SmartSettingsApp(MayanAppConfig):
func=lambda context: _('Yes') if context['object'].environment_variable else _('No') func=lambda context: _('Yes') if context['object'].environment_variable else _('No')
) )
menu_facet.bind_links( menu_secondary.bind_links(
links=(link_namespace_root_list,), sources=( links=(link_namespace_root_list,), sources=(
Namespace, Setting, 'settings:namespace_list', Namespace, Setting, 'settings:namespace_list',
) )

View File

@@ -5,8 +5,8 @@ from django.utils.translation import ugettext_lazy as _
from kombu import Exchange, Queue from kombu import Exchange, Queue
from common import ( from common import (
MayanAppConfig, MissingItem, menu_object, menu_secondary, menu_sidebar, MayanAppConfig, MissingItem, menu_list_facet, menu_object, menu_secondary,
menu_setup menu_sidebar, menu_setup
) )
from common.signals import post_initial_setup, post_upgrade from common.signals import post_initial_setup, post_upgrade
from converter.links import link_transformation_list from converter.links import link_transformation_list
@@ -122,10 +122,18 @@ class SourcesApp(MayanAppConfig):
) )
menu_documents.bind_links(links=(link_document_create_multiple,)) menu_documents.bind_links(links=(link_document_create_multiple,))
menu_list_facet.bind_links(
links=(
link_setup_source_logs, link_transformation_list,
), sources=(
POP3Email, IMAPEmail, SaneScanner, StagingFolderSource,
WatchFolderSource, WebFormSource
)
)
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_setup_source_edit, link_setup_source_delete, link_setup_source_edit, link_setup_source_delete,
link_transformation_list, link_setup_source_logs
), sources=( ), sources=(
POP3Email, IMAPEmail, SaneScanner, StagingFolderSource, POP3Email, IMAPEmail, SaneScanner, StagingFolderSource,
WatchFolderSource, WebFormSource WatchFolderSource, WebFormSource

View File

@@ -9,7 +9,8 @@ from documents.permissions import (
from navigation import Link from navigation import Link
from .icons import ( from .icons import (
icon_document_create_multiple, icon_setup_sources, icon_source_create icon_document_create_multiple, icon_log, icon_setup_sources,
icon_source_create
) )
from .literals import ( from .literals import (
SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_EMAIL_IMAP, SOURCE_CHOICE_EMAIL_POP3, SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_EMAIL_IMAP, SOURCE_CHOICE_EMAIL_POP3,
@@ -111,7 +112,7 @@ link_upload_version = Link(
text=_('Upload new version'), view='sources:upload_version', text=_('Upload new version'), view='sources:upload_version',
) )
link_setup_source_logs = Link( link_setup_source_logs = Link(
args=('resolved_object.pk',), args=('resolved_object.pk',), icon_class=icon_log,
permissions=(permission_sources_setup_view,), text=_('Logs'), permissions=(permission_sources_setup_view,), text=_('Logs'),
view='sources:setup_source_logs', view='sources:setup_source_logs',
) )

View File

@@ -8,8 +8,8 @@ from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import ( from common import (
MayanAppConfig, menu_facet, menu_object, menu_main, menu_multi_item, MayanAppConfig, menu_facet, menu_list_facet, menu_object, menu_main,
menu_sidebar menu_multi_item, menu_sidebar
) )
from common.classes import ModelField from common.classes import ModelField
from documents.search import document_page_search, document_search from documents.search import document_page_search, document_search
@@ -25,9 +25,10 @@ from .events import (
) )
from .handlers import handler_index_document, handler_tag_pre_delete from .handlers import handler_index_document, handler_tag_pre_delete
from .links import ( from .links import (
link_multiple_documents_attach_tag, link_multiple_documents_tag_remove, link_document_tag_list, link_multiple_documents_attach_tag,
link_single_document_multiple_tag_remove, link_tag_attach, link_tag_create, link_multiple_documents_tag_remove,
link_tag_delete, link_tag_document_list, link_tag_edit, link_tag_list, link_single_document_multiple_tag_remove, link_tag_attach,
link_tag_create, link_tag_delete, link_tag_edit, link_tag_list,
link_tag_multiple_delete, link_tag_tagged_item_list link_tag_multiple_delete, link_tag_tagged_item_list
) )
from .menus import menu_tags from .menus import menu_tags
@@ -138,13 +139,16 @@ class TagsApp(MayanAppConfig):
document_search.add_model_field(field='tags__label', label=_('Tags')) document_search.add_model_field(field='tags__label', label=_('Tags'))
menu_facet.bind_links( menu_facet.bind_links(
links=(link_tag_document_list,), sources=(Document,) links=(link_document_tag_list,), sources=(Document,)
) )
menu_tags.bind_links( menu_list_facet.bind_links(
links=( links=(
link_tag_list, link_tag_create link_acl_list, link_events_for_object,
) link_object_event_types_user_subcriptions_list,
link_tag_tagged_item_list,
),
sources=(Tag,)
) )
menu_main.bind_links(links=(menu_tags,), position=98) menu_main.bind_links(links=(menu_tags,), position=98)
@@ -161,10 +165,7 @@ class TagsApp(MayanAppConfig):
) )
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_tag_tagged_item_list, link_tag_edit, link_acl_list, link_tag_edit, link_tag_delete
link_events_for_object,
link_object_event_types_user_subcriptions_list,
link_tag_delete
), ),
sources=(Tag,) sources=(Tag,)
) )
@@ -175,6 +176,12 @@ class TagsApp(MayanAppConfig):
'tags:single_document_multiple_tag_remove' 'tags:single_document_multiple_tag_remove'
) )
) )
menu_tags.bind_links(
links=(
link_tag_list, link_tag_create
)
)
registry.register(Tag) registry.register(Tag)
# Index update # Index update

View File

@@ -2,6 +2,7 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.icons import icon_document_list
from navigation import Link, get_cascade_condition from navigation import Link, get_cascade_condition
from .icons import ( from .icons import (
@@ -13,6 +14,11 @@ from .permissions import (
) )
link_document_tag_list = Link(
args='resolved_object.pk', icon_class=icon_tag_document_list,
permissions=(permission_tag_view,), text=_('Tags'),
view='tags:document_tags',
)
link_multiple_documents_tag_remove = Link( link_multiple_documents_tag_remove = Link(
text=_('Remove tag'), view='tags:multiple_documents_selection_tag_remove' text=_('Remove tag'), view='tags:multiple_documents_selection_tag_remove'
) )
@@ -40,11 +46,6 @@ link_tag_edit = Link(
args='object.id', permissions=(permission_tag_edit,), text=_('Edit'), args='object.id', permissions=(permission_tag_edit,), text=_('Edit'),
view='tags:tag_edit', view='tags:tag_edit',
) )
link_tag_document_list = Link(
args='resolved_object.pk', icon_class=icon_tag_document_list,
permissions=(permission_tag_view,), text=_('Tags'),
view='tags:document_tags',
)
link_tag_list = Link( link_tag_list = Link(
condition=get_cascade_condition( condition=get_cascade_condition(
app_label='tags', model_name='Tag', app_label='tags', model_name='Tag',
@@ -56,5 +57,6 @@ link_tag_multiple_delete = Link(
view='tags:tag_multiple_delete' view='tags:tag_multiple_delete'
) )
link_tag_tagged_item_list = Link( link_tag_tagged_item_list = Link(
args='object.id', text=('Documents'), view='tags:tag_tagged_item_list', args='object.id', icon_class=icon_document_list, text=('Documents'),
view='tags:tag_tagged_item_list',
) )

View File

@@ -8,7 +8,9 @@ from django.utils.translation import ugettext_lazy as _
from acls import ModelPermission from acls import ModelPermission
from acls.links import link_acl_list from acls.links import link_acl_list
from acls.permissions import permission_acl_edit, permission_acl_view from acls.permissions import permission_acl_edit, permission_acl_view
from common import menu_multi_item, menu_object, menu_secondary, menu_setup from common import (
menu_list_facet, menu_multi_item, menu_object, menu_secondary, menu_setup
)
from common.apps import MayanAppConfig from common.apps import MayanAppConfig
from common.widgets import TwoStateWidget from common.widgets import TwoStateWidget
from metadata import MetadataLookup from metadata import MetadataLookup
@@ -109,22 +111,32 @@ class UserManagementApp(MayanAppConfig):
).render() ).render()
) )
menu_list_facet.bind_links(
links=(
link_acl_list, link_group_members,
), sources=(Group,)
)
menu_list_facet.bind_links(
links=(
link_acl_list, link_user_groups
), sources=(User,)
)
menu_multi_item.bind_links( menu_multi_item.bind_links(
links=(link_user_multiple_set_password, link_user_multiple_delete), links=(link_user_multiple_set_password, link_user_multiple_delete),
sources=('user_management:user_list',) sources=('user_management:user_list',)
) )
menu_object.bind_links( menu_object.bind_links(
links=(link_group_edit, link_group_members,), links=(link_group_edit,),
sources=(Group,) sources=(Group,)
) )
menu_object.bind_links( menu_object.bind_links(
links=(link_acl_list, link_group_delete,), position=99, links=(link_group_delete,), position=99,
sources=(Group,) sources=(Group,)
) )
menu_object.bind_links( menu_object.bind_links(
links=( links=(
link_user_edit, link_user_set_password, link_user_groups, link_user_edit, link_user_set_password, link_user_set_options,
link_user_set_options, link_acl_list, link_user_delete link_user_delete
), sources=(User,) ), sources=(User,)
) )
menu_secondary.bind_links( menu_secondary.bind_links(

View File

@@ -2,7 +2,9 @@ from __future__ import absolute_import, unicode_literals
from appearance.classes import Icon from appearance.classes import Icon
icon_group = Icon(driver_name='fontawesome', symbol='users')
icon_group_create = Icon(driver_name='fontawesome', symbol='plus') icon_group_create = Icon(driver_name='fontawesome', symbol='plus')
icon_group_members = Icon(driver_name='fontawesome', symbol='user')
icon_group_setup = Icon(driver_name='fontawesome', symbol='users') icon_group_setup = Icon(driver_name='fontawesome', symbol='users')
icon_user_create = Icon(driver_name='fontawesome', symbol='plus') icon_user_create = Icon(driver_name='fontawesome', symbol='plus')
icon_user_setup = Icon(driver_name='fontawesome', symbol='user') icon_user_setup = Icon(driver_name='fontawesome', symbol='user')

View File

@@ -5,7 +5,8 @@ from django.utils.translation import ugettext_lazy as _
from navigation import Link from navigation import Link
from .icons import ( from .icons import (
icon_group_create, icon_group_setup, icon_user_create, icon_user_setup icon_group, icon_group_create, icon_group_members, icon_group_setup,
icon_user_create, icon_user_setup
) )
from .permissions import ( from .permissions import (
permission_group_create, permission_group_delete, permission_group_edit, permission_group_create, permission_group_delete, permission_group_edit,
@@ -30,7 +31,8 @@ link_group_list = Link(
view='user_management:group_list' view='user_management:group_list'
) )
link_group_members = Link( link_group_members = Link(
args='object.id', permissions=(permission_group_edit,), text=_('Users'), args='object.id', icon_class=icon_group_members,
permissions=(permission_group_edit,), text=_('Users'),
view='user_management:group_members', view='user_management:group_members',
) )
link_group_setup = Link( link_group_setup = Link(
@@ -50,7 +52,8 @@ link_user_edit = Link(
view='user_management:user_edit', view='user_management:user_edit',
) )
link_user_groups = Link( link_user_groups = Link(
args='object.id', permissions=(permission_user_edit,), text=_('Groups'), args='object.id', icon_class=icon_group,
permissions=(permission_user_edit,), text=_('Groups'),
view='user_management:user_groups', view='user_management:user_groups',
) )
link_user_list = Link( link_user_list = Link(

View File

@@ -286,6 +286,7 @@ class UserOptionsEditView(SingleObjectEditView):
def get_extra_context(self): def get_extra_context(self):
return { return {
'object': self.get_user(),
'title': _( 'title': _(
'Edit options for user: %s' 'Edit options for user: %s'
) % self.get_user() ) % self.get_user()