import string from datetime import date import django.forms as forms from django.forms import ModelForm from django.forms.models import modelformset_factory from django.contrib.admin.widgets import AdminDateWidget #from tinymce.widgets import TinyMCE from troggle.core.models import Person, PersonExpedition, Expedition from troggle.core.models_caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance class CaveForm(ModelForm): underground_description = forms.CharField(required = False, widget=forms.Textarea()) explorers = forms.CharField(required = False, widget=forms.Textarea()) equipment = forms.CharField(required = False, widget=forms.Textarea()) survey = forms.CharField(required = False, widget=forms.Textarea()) kataster_status = forms.CharField(required = False, widget=forms.Textarea()) underground_centre_line = forms.CharField(required = False, widget=forms.Textarea()) notes = forms.CharField(required = False, widget=forms.Textarea()) references = forms.CharField(required = False, widget=forms.Textarea()) url = forms.CharField(required = True) class Meta: model = Cave exclude = ("filename",) def clean(self): if self.cleaned_data.get("kataster_number") == "" and self.cleaned_data.get("unofficial_number") == "": self._errors["unofficial_number"] = self.error_class(["Either the kataster or unoffical number is required."]) if self.cleaned_data.get("kataster_number") != "" and self.cleaned_data.get("official_name") == "": self._errors["official_name"] = self.error_class(["This field is required when there is a kataster number."]) if self.cleaned_data.get("area") == []: self._errors["area"] = self.error_class(["This field is required."]) if self.cleaned_data.get("url") and self.cleaned_data.get("url").startswith("/"): self._errors["url"] = self.error_class(["This field can not start with a /."]) return self.cleaned_data class VersionControlCommentForm(forms.Form): description_of_change = forms.CharField(required = True, widget=forms.Textarea()) class EntranceForm(ModelForm): #underground_description = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) #explorers = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #equipment = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #kataster_status = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #underground_centre_line = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #notes = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) #references = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) other_station = forms.CharField(required=False) # Trying to change this to a single line entry tag_station = forms.CharField(required=False) # Trying to change this to a single line entry exact_station = forms.CharField(required=False) # Trying to change this to a single line entry northing = forms.CharField(required=False) # Trying to change this to a single line entry easting = forms.CharField(required=False) # Trying to change this to a single line entry alt = forms.CharField(required=False) # Trying to change this to a single line entry class Meta: model = Entrance exclude = ("cached_primary_slug", "filename",) def clean(self): if self.cleaned_data.get("url").startswith("/"): self._errors["url"] = self.error_class(["This field can not start with a /."]) return self.cleaned_data CaveAndEntranceFormSet = modelformset_factory(CaveAndEntrance, exclude=('cave',)) class EntranceLetterForm(ModelForm): class Meta: model = CaveAndEntrance exclude = ('cave', 'entrance') #class PersonForm(ModelForm): # class Meta: # model = Person #class LogbookEntryForm(ModelForm): # class Meta: # model = LogbookEntry# # def wikiLinkHints(LogbookEntry=None): # """ # This function returns html-formatted paragraphs for each of the # wikilink types that are related to this logbookentry. Each paragraph # contains a list of all of the related wikilinks. # # Perhaps an admin javascript solution would be better. # """ # res = ["Please use the following wikilinks, which are related to this logbook entry:"] # # res.append(r'

QMs found:') # for QM in LogbookEntry.instance.QMs_found.all(): # res.append(QM.wiki_link()) # res.append(r'

QMs ticked off:') # for QM in LogbookEntry.instance.QMs_ticked_off.all(): # res.append(QM.wiki_link()) # res.append(r'

People') # for persontrip in LogbookEntry.instance.persontrip_set.all(): # res.append(persontrip.wiki_link()) # res.append(r'

') # return string.join(res, r'
') # def __init__(self, *args, **kwargs): # super(LogbookEntryForm, self).__init__(*args, **kwargs) # self.fields['text'].help_text=self.wikiLinkHints()# #class CaveForm(forms.Form): # html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) def getTripForm(expedition): class TripForm(forms.Form): date = forms.DateField() title = forms.CharField(max_length=200) caves = sorted([cave.reference() for cave in Cave.objects.all()]) caves = ["-----"] + caves cave = forms.ChoiceField([(c, c) for c in caves], required=False) location = forms.CharField(max_length=200, required=False) caveOrLocation = forms.ChoiceField([("cave", "Cave"), ("location", "Location")], widget = forms.widgets.RadioSelect()) # html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) html = forms.CharField(widget=forms.Textarea(attrs={"cols":80, "rows":20})) def clean(self): print((dir(self))) if self.cleaned_data.get("caveOrLocation") == "cave" and not self.cleaned_data.get("cave"): self._errors["cave"] = self.error_class(["This field is required"]) if self.cleaned_data.get("caveOrLocation") == "location" and not self.cleaned_data.get("location"): self._errors["location"] = self.error_class(["This field is required"]) return self.cleaned_data class PersonTripForm(forms.Form): names = sorted([get_name(pe) for pe in PersonExpedition.objects.filter(expedition = expedition)]) names = ["-----"] + names name = forms.ChoiceField([(n, n) for n in names]) TU = forms.FloatField(required=False) author = forms.BooleanField(required=False, default=False) PersonTripFormSet = formset_factory(PersonTripForm, extra=1) return PersonTripFormSet, TripForm def get_name(pe): if pe.nickname: return pe.nickname else: return pe.person.first_name class UploadFileForm(forms.Form): # Because this has EXECUTABLE statements in its signature (the fields) they get # executed when this module is LOADED. Which barfs horribly. # so all replaced by an __init__ method instead. def __init__(self): title = forms.CharField(max_length=50) file = forms.FileField() #html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) html = forms.CharField(widget=forms.Textarea(attrs={"cols":80, "rows":20})) lon_utm = forms.FloatField(required=False) lat_utm = forms.FloatField(required=False) slug = forms.CharField(max_length=50) date = forms.DateField(required=False) #This next line is the one that causes django.setup() to BARF LOUDLY caves = [cave.slug for cave in Cave.objects.all()] #caves.sort() # sort needs rewriting for python3 caves = ["-----"] + caves cave = forms.ChoiceField([(c, c) for c in caves], required=False) entrance = forms.ChoiceField([("-----", "Please select a cave"), ], required=False) qm = forms.ChoiceField([("-----", "Please select a cave"), ], required=False) expeditions = [e.year for e in Expedition.objects.all()] expeditions.sort() expeditions = ["-----"] + expeditions expedition = forms.ChoiceField([(e, e) for e in expeditions], required=False) logbookentry = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False) person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False) survey_point = forms.CharField()