Aucune description

views_admin.py 3.0KB

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