summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-01-20 17:10:43 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-12-12 12:20:59 +0100
commit31ef78cec0cd2ba3ccc91c4bafd89831e73abe20 (patch)
tree9a8365bef9f59a9348d719dcb3cb4e055e4ccce1 /ishtar_common/forms_common.py
parent06b13fe771fd67ab655f0c81bbae51add767deb2 (diff)
downloadIshtar-31ef78cec0cd2ba3ccc91c4bafd89831e73abe20.tar.bz2
Ishtar-31ef78cec0cd2ba3ccc91c4bafd89831e73abe20.zip
External sources - limit access in admin, limit by profile
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py66
1 files changed, 51 insertions, 15 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 70727b243..0cdb70a36 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -44,7 +44,7 @@ from django.utils.text import slugify
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _, pgettext
-from . import models
+from . import models, models_rest
from . import widgets
from bootstrap_datepicker.widgets import DatePicker
from ishtar_common.templatetags.link_to_window import simple_link_to_window
@@ -705,7 +705,7 @@ class QAPersonFormMulti(QAForm):
associated_models = {
"qa_title": models.TitleType,
"qa_attached_to": models.Organization,
- "qa_person_types": models.PersonType
+ "qa_person_types": models.PersonType,
}
MULTI = True
@@ -726,7 +726,7 @@ class QAPersonFormMulti(QAForm):
TYPES = [
FieldType("qa_title", models.TitleType),
- FieldType('qa_person_types', models.PersonType, is_multiple=True),
+ FieldType("qa_person_types", models.PersonType, is_multiple=True),
]
def _get_qa_attached_to(self, value):
@@ -1159,7 +1159,7 @@ class ProfilePersonForm(forms.Form):
auto_pin = forms.BooleanField(
label=_("Pin automatically items on creation and modification"), required=False
)
- display_pin_menu = forms.BooleanField(label=_("Show pin menu"), required=False)
+ # display_pin_menu = forms.BooleanField(label=_("Show pin menu"), required=False)
duplicate_profile = forms.BooleanField(
label=_("Duplicate this profile"), required=False
@@ -1184,11 +1184,46 @@ class ProfilePersonForm(forms.Form):
initial["name"] = current_profile.name or current_profile.profile_type
initial["profile_type"] = current_profile.profile_type.pk
initial["auto_pin"] = current_profile.auto_pin
- initial["display_pin_menu"] = current_profile.display_pin_menu
+ # initial["display_pin_menu"] = current_profile.display_pin_menu
kwargs["initial"] = initial
super(ProfilePersonForm, self).__init__(*args, **kwargs)
self.fields["current_profile"].choices = choices
+ current_external_sources = (
+ [src.pk for src in current_profile.external_sources.all()]
+ if current_profile
+ else []
+ )
+ extra_fields = []
+ q = models_rest.ApiExternalSource.objects.filter(users=self.user.ishtaruser)
+ for src in q.all():
+ initial = True if src.pk in current_external_sources else False
+ extra_fields.append(
+ (
+ f"external_source_{src.pk}",
+ forms.BooleanField(
+ label=_(f"External source - {src.name}"),
+ required=False,
+ initial=initial,
+ ),
+ )
+ )
+
+ self.fields[f"external_source_{src.pk}"] = forms.BooleanField(
+ label=_(f"External source - {src.name}"),
+ required=False,
+ initial=initial,
+ )
+ if extra_fields:
+ # reorder fields
+ fields = OrderedDict()
+ for key in self.fields.keys():
+ if key == "duplicate_profile":
+ for extra_key, extra_field in extra_fields:
+ fields[extra_key] = extra_fields
+ fields[key] = self.fields[key]
+ self.fields = fields
+
if (
not current_profile
or not self.user.ishtaruser.person.profiles.filter(
@@ -1264,9 +1299,16 @@ class ProfilePersonForm(forms.Form):
profile.current = True
profile.name = name
profile.auto_pin = self.cleaned_data["auto_pin"]
- profile.display_pin_menu = self.cleaned_data["display_pin_menu"]
+ # profile.display_pin_menu = self.cleaned_data["display_pin_menu"]
profile.save()
+ profile.external_sources.clear()
+ q = models_rest.ApiExternalSource.objects.filter(users=self.user.ishtaruser)
+ for src in q.all():
+ if self.cleaned_data.get(f"external_source_{src.pk}", False):
+ profile.external_sources.add(src)
clean_session_cache(session)
+ if "EXTERNAL_SOURCES" in session:
+ session.pop("EXTERNAL_SOURCES")
class TownForm(forms.Form):
@@ -2096,15 +2138,9 @@ class QADocumentFormMulti(QAForm):
qa_creation_date = forms.DateField(
label=_("Creation date"), widget=DatePicker, required=False
)
- qa_format_type = forms.ChoiceField(
- label=_("Format"), choices=[], required=False
- )
- qa_support_type = forms.ChoiceField(
- label=_("Medium"), choices=[], required=False
- )
- qa_scale = forms.CharField(
- label=_("Scale"), max_length=30, required=False
- )
+ qa_format_type = forms.ChoiceField(label=_("Format"), choices=[], required=False)
+ qa_support_type = forms.ChoiceField(label=_("Medium"), choices=[], required=False)
+ qa_scale = forms.CharField(label=_("Scale"), max_length=30, required=False)
TYPES = [
FieldType("qa_source_type", models.SourceType),