diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/forms.py | 120 | ||||
-rw-r--r-- | core/views/caves.py | 39 |
2 files changed, 157 insertions, 2 deletions
diff --git a/core/forms.py b/core/forms.py index f3df10a..8365a63 100644 --- a/core/forms.py +++ b/core/forms.py @@ -6,7 +6,7 @@ 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 tinymce.widgets import TinyMCE from troggle.core.models.troggle import Person, PersonExpedition, Expedition from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance @@ -25,6 +25,7 @@ class CaveForm(ModelForm): '''Only those fields for which we want to override defaults are listed here the other fields are present on the form, but use the default presentation style ''' + official_name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) underground_description = forms.CharField(required = False, widget=HTMLarea( attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) @@ -62,6 +63,123 @@ class CaveForm(ModelForm): if self.cleaned_data.get("url") and self.cleaned_data.get("url").startswith("/"): self._errors["url"] = self.error_class(["This field cannot start with a /."]) return self.cleaned_data + + +class CaveFormTextArea(ModelForm): + '''Only those fields for which we want to override defaults are listed here + the other fields are present on the form, but use the default presentation style + ''' + + official_name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + underground_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + explorers = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + equipment = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + survey = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + #survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) + kataster_status = forms.CharField(required = False) + underground_centre_line = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + notes = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + references = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9})) + description_file = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + survex_file = forms.CharField(required = False, label="Survex file [caves-1623/000/000.svx]", widget=forms.TextInput(attrs={'size': '45'})) + url = forms.CharField(required = True, label="URL [1623/000/000]", widget=forms.TextInput(attrs={'size': '45'})) + length = forms.CharField(required = False, label="Length (m)") + depth = forms.CharField(required = False, label="Depth (m)") + extent = forms.CharField(required = False, label="Extent (m)") + 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 cannot start with a /."]) + return self.cleaned_data + + +class CaveFormCodeMirrorPreview(ModelForm): + '''Only those fields for which we want to override defaults are listed here + the other fields are present on the form, but use the default presentation style + ''' + + official_name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + underground_description = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + explorers = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + equipment = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + survey = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + #survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) + kataster_status = forms.CharField(required = False) + underground_centre_line = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + notes = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + references = forms.CharField(required = False, widget=HTMLarea(preview = True, + attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + description_file = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + survex_file = forms.CharField(required = False, label="Survex file [caves-1623/000/000.svx]", widget=forms.TextInput(attrs={'size': '45'})) + url = forms.CharField(required = True, label="URL [1623/000/000]", widget=forms.TextInput(attrs={'size': '45'})) + length = forms.CharField(required = False, label="Length (m)") + depth = forms.CharField(required = False, label="Depth (m)") + extent = forms.CharField(required = False, label="Extent (m)") + 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 cannot start with a /."]) + return self.cleaned_data + +class CaveFormTinyMCE(ModelForm): + '''Only those fields for which we want to override defaults are listed here + the other fields are present on the form, but use the default presentation style + ''' + + official_name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + underground_description = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + explorers = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + equipment = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + #survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10})) + kataster_status = forms.CharField(required = False) + underground_centre_line = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + notes = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + references = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30})) + description_file = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'})) + survex_file = forms.CharField(required = False, label="Survex file [caves-1623/000/000.svx]", widget=forms.TextInput(attrs={'size': '45'})) + url = forms.CharField(required = True, label="URL [1623/000/000]", widget=forms.TextInput(attrs={'size': '45'})) + length = forms.CharField(required = False, label="Length (m)") + depth = forms.CharField(required = False, label="Depth (m)") + extent = forms.CharField(required = False, label="Extent (m)") + 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 cannot start with a /."]) + return self.cleaned_data class EntranceForm(ModelForm): '''Only those fields for which we want to override defaults are listed here diff --git a/core/views/caves.py b/core/views/caves.py index 8df801b..bbc2750 100644 --- a/core/views/caves.py +++ b/core/views/caves.py @@ -18,7 +18,7 @@ import troggle.settings as settings from troggle.core.views import expo from troggle.core.models.troggle import Expedition, DataIssue from troggle.core.models.caves import CaveSlug, Cave, CaveAndEntrance, QM, EntranceSlug, Entrance, Area, SurvexStation, GetCaveLookup -from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, EntranceForm, EntranceLetterForm +from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, EntranceForm, EntranceLetterForm, CaveFormCodeMirrorPreview, CaveFormTextArea, CaveFormTinyMCE from .auth import login_required_if_public '''Manages the complex procedures to assemble a cave description out of the compnoents @@ -297,6 +297,42 @@ def caveEntrance(request, slug): else: return render(request,'cave_entrances.html', {'cave': cave}) +def test_edit_cave(request, editor = "codemirror"): + '''This is the form that edits all the cave data and writes out an XML file in the :expoweb: repo folder + The format for the file being saved is in templates/dataformat/cave.xml + + It does save the data into into the database directly, not by parsing the file. + It does NOT yet commit to the git repoSaving is not allowed + ''' + form_type = {"codemirror": CaveForm, "codemirrorpreview": CaveFormCodeMirrorPreview, "textarea": CaveFormTextArea, "tinymce": CaveFormTinyMCE}[editor] + + message = "" + try: + cave = Cave.objects.get(caveslug__slug = "1623-264") + except: + return render(request,'errors/badslug.html') + if request.POST: + form = form_type(request.POST, instance=cave) + ceFormSet = CaveAndEntranceFormSet(request.POST) + #versionControlForm = VersionControlCommentForm(request.POST) + if form.is_valid() and ceFormSet.is_valid(): + pass + else: + message = f'! POST data is INVALID {cave}' + print(message) + else: + form = form_type(instance=cave) + ceFormSet = CaveAndEntranceFormSet(queryset=cave.caveandentrance_set.all()) + #versionControlForm = VersionControlCommentForm() + + return render(request, + 'editcave.html', + {'form': form, 'cave': cave, 'message': message, + 'caveAndEntranceFormSet': ceFormSet, + 'editor': editor, + #'versionControlForm': versionControlForm + }) + @login_required_if_public def edit_cave(request, slug=None): '''This is the form that edits all the cave data and writes out an XML file in the :expoweb: repo folder @@ -305,6 +341,7 @@ def edit_cave(request, slug=None): It does save the data into into the database directly, not by parsing the file. It does NOT yet commit to the git repo ''' + message = "" if slug is not None: try: |