2018-09-19 19:08:47 +02:00
|
|
|
from django.conf import settings
|
2017-12-08 15:21:33 +01:00
|
|
|
from django.utils.functional import lazy
|
2022-04-03 16:33:43 +02:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from django.utils.translation import ngettext_lazy
|
2017-12-04 16:11:42 +01:00
|
|
|
|
2024-11-21 11:56:31 +01:00
|
|
|
from c3nav.mapdata.models import DataOverlay
|
2023-12-20 23:56:32 +01:00
|
|
|
from c3nav.mapdata.models.access import AccessPermission, AccessRestriction
|
2019-12-27 15:46:22 +01:00
|
|
|
from c3nav.mapdata.models.locations import Position
|
2024-12-16 12:53:18 +01:00
|
|
|
from c3nav.mapdata.schemas.models import DataOverlaySchema
|
2017-12-04 16:11:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
def get_user_data(request):
|
2023-12-20 23:56:32 +01:00
|
|
|
permissions = AccessPermission.get_for_request(request) - AccessRestriction.get_all_public()
|
2017-12-04 16:11:42 +01:00
|
|
|
result = {
|
|
|
|
'logged_in': bool(request.user.is_authenticated),
|
2018-11-26 01:25:07 +01:00
|
|
|
'allow_editor': can_access_editor(request),
|
|
|
|
'allow_control_panel': request.user_permissions.control_panel,
|
2024-03-30 18:16:29 +01:00
|
|
|
'mesh_control': request.user_permissions.mesh_control,
|
2019-12-27 15:46:22 +01:00
|
|
|
'has_positions': Position.user_has_positions(request.user)
|
2017-12-04 16:11:42 +01:00
|
|
|
}
|
|
|
|
if permissions:
|
|
|
|
result.update({
|
2023-12-24 15:40:48 +01:00
|
|
|
'title': _('Login'),
|
2022-04-03 16:33:43 +02:00
|
|
|
'subtitle': ngettext_lazy('%d area unlocked', '%d areas unlocked', len(permissions)) % len(permissions),
|
2017-12-04 16:11:42 +01:00
|
|
|
'permissions': tuple(permissions),
|
|
|
|
})
|
|
|
|
else:
|
|
|
|
result.update({
|
2023-12-11 20:49:50 +01:00
|
|
|
'title': _('Login'),
|
2017-12-04 16:11:42 +01:00
|
|
|
'subtitle': None,
|
|
|
|
'permissions': (),
|
|
|
|
})
|
|
|
|
if request.user.is_authenticated:
|
|
|
|
result['title'] = request.user.username
|
2024-11-21 11:56:31 +01:00
|
|
|
|
2024-12-24 20:04:49 +01:00
|
|
|
# todo: cache this
|
2024-11-21 11:56:31 +01:00
|
|
|
result.update({
|
2024-12-16 12:53:18 +01:00
|
|
|
'overlays': [
|
|
|
|
DataOverlaySchema.model_validate(overlay).model_dump()
|
2024-12-24 20:04:49 +01:00
|
|
|
for overlay in DataOverlay.qs_for_request(request)
|
|
|
|
],
|
|
|
|
'quests': bool(request.user.is_superuser or request.user_permissions.quests),
|
2024-11-21 11:56:31 +01:00
|
|
|
})
|
2024-12-24 20:04:49 +01:00
|
|
|
|
2017-12-04 16:11:42 +01:00
|
|
|
return result
|
2017-12-08 15:21:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
get_user_data_lazy = lazy(get_user_data, dict)
|
2018-09-19 19:08:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
def can_access_editor(request):
|
|
|
|
return settings.PUBLIC_EDITOR or request.user_permissions.editor_access
|