snapshot: preserve app registry and branding domain foundation
This commit is contained in:
@@ -24,8 +24,9 @@ from django.utils.translation import gettext as _, gettext_lazy
|
||||
from django.utils.translation import get_language, override
|
||||
from django.urls import reverse
|
||||
|
||||
from .app_registry import build_portal_app_sections, get_portal_app_registry_rows
|
||||
from .backup_ops import create_backup_bundle, delete_backup_bundle, list_backup_bundles, verify_backup_bundle
|
||||
from .branding import get_branding_email_copy, get_default_notification_templates
|
||||
from .branding import get_branding_email_copy, get_company_email_domain, get_default_notification_templates
|
||||
from .forms import OffboardingRequestForm, OnboardingRequestForm, PortalBrandingForm, UserManagementCreateForm
|
||||
from .form_builder import (
|
||||
DEFAULT_FIELD_ORDER,
|
||||
@@ -35,7 +36,7 @@ from .form_builder import (
|
||||
ONBOARDING_PAGE_ORDER,
|
||||
ensure_form_field_configs,
|
||||
)
|
||||
from .models import AdminAuditLog, EmployeeProfile, FormFieldConfig, FormOption, IntroChecklistItem, NotificationRule, NotificationTemplate, OffboardingRequest, OnboardingIntroductionSession, OnboardingRequest, PortalBranding, ScheduledWelcomeEmail, SystemEmailConfig, WorkflowConfig
|
||||
from .models import AdminAuditLog, EmployeeProfile, FormFieldConfig, FormOption, IntroChecklistItem, NotificationRule, NotificationTemplate, OffboardingRequest, OnboardingIntroductionSession, OnboardingRequest, PortalAppConfig, PortalBranding, ScheduledWelcomeEmail, SystemEmailConfig, WorkflowConfig
|
||||
from .emailing import send_system_email
|
||||
from .roles import ROLE_GROUP_NAMES, ROLE_LABELS, ROLE_PLATFORM_OWNER, ROLE_SUPER_ADMIN, assign_user_role, get_user_role_key, get_user_role_label, user_has_capability
|
||||
from .services import get_email_test_redirect, is_email_test_mode, is_nextcloud_enabled, upload_to_nextcloud
|
||||
@@ -244,6 +245,7 @@ def _audit_action_label(action: str) -> str:
|
||||
'backup_verified': _('Backup verifiziert'),
|
||||
'backup_deleted': _('Backup gelöscht'),
|
||||
'backup_settings_saved': _('Backup-Einstellungen gespeichert'),
|
||||
'portal_app_registry_saved': _('App-Registry gespeichert'),
|
||||
}
|
||||
return labels.get(action, action.replace('_', ' ').strip().capitalize())
|
||||
|
||||
@@ -334,10 +336,57 @@ def home(request):
|
||||
'email_test_mode': is_email_test_mode(),
|
||||
'workflow_config': config,
|
||||
'role_label': get_user_role_label(request.user),
|
||||
'portal_app_sections': build_portal_app_sections(request.user),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@_require_capability('manage_app_registry')
|
||||
def portal_app_registry_page(request):
|
||||
return render(
|
||||
request,
|
||||
'workflows/app_registry.html',
|
||||
{
|
||||
'rows': get_portal_app_registry_rows(),
|
||||
'section_choices': _translate_choice_list(PortalAppConfig.SECTION_CHOICES),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@_require_capability('manage_app_registry')
|
||||
@require_POST
|
||||
def save_portal_app_registry(request):
|
||||
rows = get_portal_app_registry_rows()
|
||||
for row in rows:
|
||||
config = row['config']
|
||||
key = config.key
|
||||
config.section = (request.POST.get(f'section__{key}') or config.section).strip()
|
||||
if config.section not in dict(PortalAppConfig.SECTION_CHOICES):
|
||||
config.section = row['default_section']
|
||||
config.is_enabled = request.POST.get(f'is_enabled__{key}') == 'on'
|
||||
try:
|
||||
config.sort_order = int((request.POST.get(f'sort_order__{key}') or '').strip() or row['default_sort_order'])
|
||||
except ValueError:
|
||||
config.sort_order = row['default_sort_order']
|
||||
config.title_override = (request.POST.get(f'title_override__{key}') or '').strip()
|
||||
config.title_override_en = (request.POST.get(f'title_override_en__{key}') or '').strip()
|
||||
config.description_override = (request.POST.get(f'description_override__{key}') or '').strip()
|
||||
config.description_override_en = (request.POST.get(f'description_override_en__{key}') or '').strip()
|
||||
config.action_label_override = (request.POST.get(f'action_label_override__{key}') or '').strip()
|
||||
config.action_label_override_en = (request.POST.get(f'action_label_override_en__{key}') or '').strip()
|
||||
config.save()
|
||||
|
||||
_audit(
|
||||
request,
|
||||
'portal_app_registry_saved',
|
||||
target_type='portal_app_registry',
|
||||
target_label='Portal App Registry',
|
||||
details={'updated_apps': len(rows)},
|
||||
)
|
||||
messages.success(request, _('App-Registry gespeichert.'))
|
||||
return redirect('portal_app_registry_page')
|
||||
|
||||
|
||||
def _user_management_rows():
|
||||
user_model = get_user_model()
|
||||
role_order = {
|
||||
@@ -1170,6 +1219,7 @@ def onboarding_create(request):
|
||||
'legal_text': legal_text,
|
||||
'saved': request.GET.get('saved') == '1',
|
||||
'saved_request_id': request.GET.get('id', ''),
|
||||
'portal_email_domain': get_company_email_domain(),
|
||||
},
|
||||
)
|
||||
|
||||
@@ -1331,7 +1381,8 @@ def offboarding_create(request):
|
||||
if selected_profile:
|
||||
obj.employee_profile = selected_profile
|
||||
requester_email = (request.user.email or '').strip().lower()
|
||||
if requester_email and requester_email.endswith('@tub.co'):
|
||||
company_suffix = f"@{get_company_email_domain()}"
|
||||
if requester_email and requester_email.endswith(company_suffix):
|
||||
obj.requested_by_email = requester_email
|
||||
else:
|
||||
obj.requested_by_email = settings.DEFAULT_FROM_EMAIL
|
||||
@@ -1353,6 +1404,7 @@ def offboarding_create(request):
|
||||
'search_query': search_query,
|
||||
'saved': request.GET.get('saved') == '1',
|
||||
'saved_request_id': request.GET.get('id', ''),
|
||||
'portal_email_domain': get_company_email_domain(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user