# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2021, Shuup Commerce Inc. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
import six
from django.utils.datastructures import OrderedDict
from django.utils.translation import get_language, ugettext_lazy as _
from shuup import configuration
from shuup.admin.base import BaseMenuEntry
from shuup.admin.module_registry import get_modules
from shuup.admin.supplier_provider import get_supplier
from shuup.admin.utils.permissions import get_missing_permissions
from shuup.admin.views.home import QUICKLINK_ORDER
from shuup.apps.provides import get_provide_objects
from shuup.utils.django_compat import force_text
ORDERS_MENU_CATEGORY = 1
PRODUCTS_MENU_CATEGORY = 2
CONTACTS_MENU_CATEGORY = 3
REPORTS_MENU_CATEGORY = 4
CAMPAIGNS_MENU_CATEGORY = 5
STOREFRONT_MENU_CATEGORY = 6
ADDONS_MENU_CATEGORY = 7
SETTINGS_MENU_CATEGORY = 8
CONTENT_MENU_CATEGORY = 9
LOG_MENU_CATEGORY = 10
MESSAGES_MENU_CATEGORY = 11
MAIN_MENU = [
{
"identifier": ORDERS_MENU_CATEGORY,
"title": _("Orders"),
"icon": "fa fa-inbox",
},
{
"identifier": PRODUCTS_MENU_CATEGORY,
"title": _("Products"),
"icon": "fa fa-cube",
},
{
"identifier": CONTACTS_MENU_CATEGORY,
"title": _("Contacts"),
"icon": "fa fa-users",
},
{
"identifier": CAMPAIGNS_MENU_CATEGORY,
"title": _("Campaigns"),
"icon": "fa fa-bullhorn",
},
{
"identifier": CONTENT_MENU_CATEGORY,
"title": _("Content"),
"icon": "fa fa-columns",
},
{
"identifier": REPORTS_MENU_CATEGORY,
"title": _("Reports"),
"icon": "fa fa-bar-chart",
},
{
"identifier": STOREFRONT_MENU_CATEGORY,
"title": _("Shops"),
"icon": "fa fa-shopping-basket",
},
{
"identifier": ADDONS_MENU_CATEGORY,
"title": _("Addons"),
"icon": "fa fa-puzzle-piece",
},
{
"identifier": SETTINGS_MENU_CATEGORY,
"title": _("Settings"),
"icon": "fa fa-tachometer",
},
{
"identifier": LOG_MENU_CATEGORY,
"title": _("Logs"),
"icon": "fa fa-archive",
},
{
"identifier": MESSAGES_MENU_CATEGORY,
"title": _("Messages"),
"icon": "fa fa-envelope",
},
]
CUSTOM_ADMIN_MENU_USER_PREFIX = "admin_menu_user_{}"
CUSTOM_ADMIN_MENU_SUPPLIER_KEY = "admin_menu_supplier"
CUSTOM_ADMIN_MENU_STAFF_KEY = "admin_menu_staff"
CUSTOM_ADMIN_MENU_SUPERUSER_KEY = "admin_menu_superuser"
class _MenuCategory(BaseMenuEntry):
"""
Internal menu category object.
"""
def __init__(self, identifier, name, icon):
self.identifier = identifier
self.name = name
self.icon = icon
self.children = []
self.entries = []
def contains_badges(self, request):
return any(bool(entry.get_badge(request)) for entry in self.entries)
[docs]def extend_main_menu(menu):
for menu_updater in get_provide_objects("admin_main_menu_updater"):
menu = menu_updater(menu).update()
return menu
[docs]def get_quicklinks(request):
quicklinks = OrderedDict()
for block in QUICKLINK_ORDER:
quicklinks[block] = []
for module in get_modules():
if get_missing_permissions(request.user, module.get_required_permissions()):
continue
for help_block in module.get_help_blocks(request, kind="quicklink"):
quicklinks[help_block.category].append(help_block)
links = quicklinks.copy()
for block, data in six.iteritems(links):
if not quicklinks[block]:
quicklinks.pop(block)
return quicklinks