Add better collaboration selection tool

This commit is contained in:
R. Miles McCain 2020-04-22 14:16:21 -04:00
parent c2f4724b11
commit 7f55626d7e
No known key found for this signature in database
GPG Key ID: 91CB47BDDF2671A5
4 changed files with 30 additions and 10 deletions

View File

@ -92,4 +92,4 @@ def is_file(field):
def add_class(field, css_class):
if len(field.errors) > 0:
css_class += " ~critical"
return field.as_widget(attrs={"class": css_class})
return field.as_widget(attrs={"class": field.css_classes(extra_classes=css_class)})

View File

@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@ -1,7 +1,8 @@
from django import forms
from django.utils.translation import gettext_lazy as _
from core.models import Service
from core.models import Service, User
from allauth.account.admin import EmailAddress
class ServiceForm(forms.ModelForm):
@ -11,8 +12,7 @@ class ServiceForm(forms.ModelForm):
widgets = {
"name": forms.TextInput(),
"origins": forms.TextInput(),
"collaborators": forms.CheckboxSelectMultiple(),
"respect_dnt": forms.RadioSelect(choices=[(True, "Yes"), (False, "No")])
"respect_dnt": forms.RadioSelect(choices=[(True, "Yes"), (False, "No")]),
}
labels = {
"origins": "Allowed Hostnames",
@ -24,5 +24,26 @@ class ServiceForm(forms.ModelForm):
"origins": _(
"At what hostnames does the service operate? This sets CORS headers, so use '*' if you're not sure (or don't care)."
),
"respect_dnt": "Should visitors who have enabled <a href='https://en.wikipedia.org/wiki/Do_Not_Track'>Do Not Track</a> be excluded from all data?"
"respect_dnt": "Should visitors who have enabled <a href='https://en.wikipedia.org/wiki/Do_Not_Track'>Do Not Track</a> be excluded from all data?",
}
collaborators = forms.CharField(help_text="Which users should have read-only access to this service? (Comma separated list of emails.)", required=False)
def clean_collaborators(self):
collaborators = []
for collaborator_email in self.cleaned_data["collaborators"].split(","):
email = collaborator_email.strip()
if email == "":
continue
collaborator_email_linked = EmailAddress.objects.filter(email__iexact=email).first()
if collaborator_email_linked is None:
raise forms.ValidationError(f"Email '{email}' is not registered")
collaborators.append(collaborator_email_linked.user)
return collaborators
def get_initial_for_field(self, field, field_name):
initial = super(ServiceForm, self).get_initial_for_field(field, field_name)
if field_name == "collaborators":
return ", ".join([user.email for user in initial])
return initial

View File

@ -8,7 +8,8 @@
<meta name="robots" content="noindex">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% include 'a17t/head.html' %}
<script src="https://cdn.jsdelivr.net/npm/litepicker/dist/js/main.js"></script>
<script src="https://cdn.jsdelivr.net/npm/litepicker@1.2.0/dist/js/main.js"
integrity="sha256-mOlCEHUNWZPYIrc5OFL4Ab2rsJGzIPld3cy1ok7Cfx0=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/apexcharts@3.18.1/dist/apexcharts.min.js"
integrity="sha256-RalQXBZdisB04aaBsm+6YZ0b/iRYjX1MZn90m19AnCY=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="{% static 'dashboard/css/global.css' %}">
@ -33,7 +34,8 @@
</span>
</button>
<hr class="sep h-4 md:h-8 w-full">
<div id="navMenuExpanded" class="bg-white shadow-lg md:shadow-none p-4 hidden rounded-lg md:block md:bg-transparent md:border-none md:p-0 w-full">
<div id="navMenuExpanded"
class="bg-white shadow-lg md:shadow-none p-4 hidden rounded-lg md:block md:bg-transparent md:border-none md:p-0 w-full">
{% if user.owning_services.all %}
<p class="ml-2 mb-1 supra font-medium text-gray-500 pointer-events-none">Services</p>