2016-09-23 17:02:17 +02:00
|
|
|
from collections import OrderedDict
|
|
|
|
|
|
|
|
from django.conf import settings
|
2016-09-29 19:38:31 +02:00
|
|
|
from django.forms import CharField, Form, ModelForm, ValidationError
|
2016-09-26 17:23:08 +02:00
|
|
|
from django.forms.models import ModelChoiceField
|
2016-09-23 15:23:02 +02:00
|
|
|
from django.forms.widgets import HiddenInput
|
2016-09-23 17:02:17 +02:00
|
|
|
from django.utils.translation import ugettext_lazy as _
|
2016-09-23 15:23:02 +02:00
|
|
|
|
2016-09-27 16:18:18 +02:00
|
|
|
from c3nav.mapdata.models import Feature, Package
|
2016-09-26 17:23:08 +02:00
|
|
|
from c3nav.mapdata.permissions import get_unlocked_packages
|
2016-09-23 15:23:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
class FeatureForm(ModelForm):
|
2016-09-26 17:23:08 +02:00
|
|
|
def __init__(self, *args, feature_type, request=None, **kwargs):
|
2016-09-23 15:23:02 +02:00
|
|
|
self.feature_type = feature_type
|
2016-09-26 17:23:08 +02:00
|
|
|
self.request = request
|
2016-09-23 15:23:02 +02:00
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.fields['level'].widget = HiddenInput()
|
|
|
|
self.fields['geometry'].widget = HiddenInput()
|
|
|
|
|
2016-09-23 17:02:17 +02:00
|
|
|
titles = OrderedDict((lang_code, '') for lang_code, language in settings.LANGUAGES)
|
|
|
|
if self.instance is not None and self.instance.pk:
|
2016-09-26 17:23:08 +02:00
|
|
|
self.fields['name'].disabled = True
|
|
|
|
if not settings.DIRECT_EDITING:
|
|
|
|
self.fields['package'].widget = HiddenInput()
|
|
|
|
self.fields['package'].disabled = True
|
2016-10-09 16:22:45 +02:00
|
|
|
titles.update(self.instance.titles)
|
2016-09-29 16:33:45 +02:00
|
|
|
elif not settings.DIRECT_EDITING:
|
2016-09-26 17:23:08 +02:00
|
|
|
unlocked_packages = get_unlocked_packages(request)
|
|
|
|
if len(unlocked_packages) == 1:
|
|
|
|
self.fields['package'].widget = HiddenInput()
|
|
|
|
self.fields['package'].initial = next(iter(unlocked_packages))
|
|
|
|
else:
|
|
|
|
self.fields['package'] = ModelChoiceField(
|
|
|
|
queryset=Package.objects.filter(name__in=unlocked_packages)
|
|
|
|
)
|
2016-09-23 17:02:17 +02:00
|
|
|
|
|
|
|
language_titles = dict(settings.LANGUAGES)
|
|
|
|
for language in titles.keys():
|
|
|
|
new_title = self.data.get('title_' + language)
|
|
|
|
if new_title is not None:
|
|
|
|
titles[language] = new_title
|
|
|
|
self.fields['title_' + language] = CharField(label=language_titles.get(language, language), required=False,
|
|
|
|
initial=titles[language].strip(), max_length=50)
|
|
|
|
self.titles = titles
|
|
|
|
|
|
|
|
def clean(self):
|
|
|
|
super().clean()
|
|
|
|
if not any(self.titles.values()):
|
|
|
|
raise ValidationError(
|
|
|
|
_('You have to select a title in at least one language.')
|
|
|
|
)
|
|
|
|
|
|
|
|
def get_languages(self):
|
|
|
|
pass
|
|
|
|
|
2016-09-23 15:23:02 +02:00
|
|
|
class Meta:
|
2016-09-23 17:02:17 +02:00
|
|
|
# generate extra fields in the number specified via extra_fields
|
2016-09-23 15:23:02 +02:00
|
|
|
model = Feature
|
|
|
|
fields = ['name', 'package', 'level', 'geometry']
|
2016-09-29 19:38:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
class CommitForm(Form):
|
|
|
|
commit_msg = CharField(label=_('Commit message'), max_length=100)
|