Нет описания

views_admin.py 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from __future__ import annotations
  2. from django.shortcuts import render, redirect
  3. from django.contrib import messages
  4. from django.urls import reverse
  5. from .models import Organization, OrganizationSite
  6. from .forms import OrganizationForm
  7. from admin_frontend.templatetags.public_urls import public_route
  8. from cms.views import breadcrumbs
  9. def _owner_required(request):
  10. profile = getattr(request.user, "recycle_profile", None)
  11. return bool(profile and profile.role == "owner" and (getattr(request, "org", None) is None or profile.organization_id == request.org.id))
  12. @public_route(label="Organization Settings", order=10, icon="cog-6-tooth")
  13. @breadcrumbs(label="Organization Settings", name="org_settings")
  14. def org_settings(request):
  15. if not request.user.is_authenticated or not _owner_required(request):
  16. messages.error(request, "Only organization owners can access organization settings.")
  17. return redirect("admin_frontend:dashboard")
  18. org = getattr(request, "org", None)
  19. if not org:
  20. messages.error(request, "Organization context missing.")
  21. return redirect("admin_frontend:dashboard")
  22. if request.method == "POST":
  23. form = OrganizationForm(request.POST, instance=org)
  24. if form.is_valid():
  25. form.save()
  26. messages.success(request, "Organization updated.")
  27. return redirect("orgs_admin:org_settings")
  28. messages.error(request, "Please correct the errors below.")
  29. else:
  30. form = OrganizationForm(instance=org)
  31. return render(request, "orgs/org_settings.html", {"form": form})
  32. @public_route(label="Organization Sites", order=12, icon="link")
  33. @breadcrumbs(label="Organization Sites", name="org_sites")
  34. def org_sites(request):
  35. if not request.user.is_authenticated or not _owner_required(request):
  36. messages.error(request, "Only organization owners can access organization sites.")
  37. return redirect("admin_frontend:dashboard")
  38. org = getattr(request, "org", None)
  39. mappings = OrganizationSite.objects.select_related("site").filter(organization=org)
  40. if request.method == "POST":
  41. # Simple action: ensure current request.site is mapped to this org
  42. cur_site = getattr(request, "site", None)
  43. if not cur_site:
  44. messages.error(request, "Current site not detected.")
  45. return redirect("orgs_admin:org_sites")
  46. mapping, created = OrganizationSite.objects.get_or_create(site=cur_site, defaults={"organization": org})
  47. if not created and mapping.organization_id != org.id:
  48. messages.error(request, "This site is already mapped to another organization.")
  49. else:
  50. messages.success(request, "Current site mapped to this organization.")
  51. return redirect("orgs_admin:org_sites")
  52. return render(request, "orgs/org_sites.html", {"mappings": mappings, "current_site": getattr(request, "site", None)})