summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/forms.py120
-rw-r--r--core/views/caves.py39
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: