306 lines
12 KiB
Python
306 lines
12 KiB
Python
#
|
|
# Gramps - a GTK+/GNOME based genealogy program
|
|
#
|
|
# Copyright (C) 2000-2007 Donald N. Allingham
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
#
|
|
|
|
# webapp/grampsdb/forms.py
|
|
# $Id$
|
|
|
|
# forms.py forms for Django web project
|
|
|
|
# Django Modules:
|
|
from django import forms
|
|
from django.forms.models import inlineformset_factory
|
|
from django.forms.models import BaseModelFormSet
|
|
from django.forms.widgets import TextInput
|
|
|
|
# Gramps Modules:
|
|
from webapp.grampsdb.models import *
|
|
import gen.mime
|
|
|
|
# Python Modules:
|
|
import datetime
|
|
|
|
class PersonForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Person
|
|
exclude = ["death", "birth", "handle", "birth_ref_index",
|
|
"death_ref_index", "families", "parent_families",
|
|
"cache"]
|
|
|
|
class NameForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Name
|
|
# Exclude these, so they don't get checked:
|
|
exclude = ["order", "calendar", "modifier",
|
|
"quality",
|
|
#"quality_estimated", "quality_calculated",
|
|
#"quality_interpreted",
|
|
"year1", "day1", "month1",
|
|
"sortval", "newyear", "person"]
|
|
# Add these because they are TextFields, which render as
|
|
# Textareas:
|
|
first_name = forms.CharField(label="Given",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'60'}))
|
|
title = forms.CharField(required=False,
|
|
widget=TextInput(attrs={'size':'15'}))
|
|
call = forms.CharField(label="Call",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'15'}))
|
|
nick = forms.CharField(label="Nick",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'15'}))
|
|
group_as = forms.CharField(label="Group as",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'30'}))
|
|
suffix = forms.CharField(required=False,
|
|
initial=' suffix ',
|
|
widget=TextInput(attrs={'size':'15',
|
|
'style': 'font-style: italic; color: gray; ',
|
|
'onFocus': """if (this.value == ' suffix ') {
|
|
this.value = '';
|
|
}
|
|
this.style.color = "black";
|
|
this.style.fontStyle = 'normal';
|
|
""",
|
|
'onBlur': """if (this.value == '') {
|
|
this.value = ' suffix ';
|
|
this.style.color = "gray";
|
|
this.style.fontStyle = 'italic';
|
|
}
|
|
"""}))
|
|
|
|
class NameFormFromPerson(NameForm):
|
|
class Meta:
|
|
model = Name
|
|
# Exclude these, so they don't get checked:
|
|
# Excludes sort_as and display_as
|
|
exclude = ["order", "calendar", "modifier",
|
|
"quality",
|
|
#"quality_estimated", "quality_calculated",
|
|
#"quality_interpreted",
|
|
"year1", "day1", "month1",
|
|
"sortval", "newyear", "person",
|
|
"group_as", "sort_as", "display_as"]
|
|
|
|
class SurnameForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Surname
|
|
exclude = ['name', 'order']
|
|
|
|
surname = forms.CharField(label="Surname",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'30'}))
|
|
|
|
connector = forms.CharField(label="Connector",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'30'}))
|
|
|
|
prefix = forms.CharField(label="Prefix",
|
|
required=False,
|
|
initial=' prefix ',
|
|
widget=TextInput(attrs={'size':'15',
|
|
'style': 'font-style: italic; color: gray; ',
|
|
'onFocus': """if (this.value == ' prefix ') {
|
|
this.value = '';
|
|
}
|
|
this.style.color = "black";
|
|
this.style.fontStyle = 'normal';
|
|
""",
|
|
'onBlur': """if (this.value == '') {
|
|
this.value = ' prefix ';
|
|
this.style.color = "gray";
|
|
this.style.fontStyle = 'italic';
|
|
}
|
|
"""}))
|
|
class FamilyForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Family
|
|
exclude = ["handle", "cache"]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(FamilyForm, self).__init__(*args, **kwargs)
|
|
self.fields['father'].queryset = Person.objects.filter(
|
|
gender_type=get_type_from_name(GenderType, "Male")) \
|
|
.order_by("name__surname__surname", "name__first_name")
|
|
self.fields['mother'].queryset = Person.objects.filter(
|
|
gender_type=get_type_from_name(GenderType, "Female")) \
|
|
.order_by("name__surname__surname", "name__first_name")
|
|
|
|
class EventForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Event
|
|
exclude = ["handle", "sortval", "month1", "year1", "day1",
|
|
"newyear", "calendar", "modifier", "quality", "cache"]
|
|
|
|
def clean(self):
|
|
from webapp.utils import dp
|
|
data = super(EventForm, self).clean()
|
|
dobj = dp(data.get('text'))
|
|
if not dobj.is_valid():
|
|
msg = u"Invalid date format"
|
|
self._errors["date"] = self.error_class([msg])
|
|
del data["text"]
|
|
return data
|
|
|
|
def save(self, commit=True):
|
|
from webapp.utils import dp
|
|
from webapp.libdjango import DjangoInterface
|
|
dji = DjangoInterface()
|
|
model = super(EventForm, self).save(commit=False)
|
|
dobj = dp(self.cleaned_data['text'])
|
|
dji.add_date(model, dobj.serialize())
|
|
if commit:
|
|
model.save()
|
|
return model
|
|
|
|
text = forms.CharField(label="Date",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'45'}))
|
|
|
|
class NoteForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Note
|
|
exclude = ["handle", "text"]
|
|
|
|
notetext = forms.CharField(label="Text",
|
|
widget=forms.widgets.Textarea(attrs={'rows':'10', 'cols': '80', 'class':'wysiwyg'}))
|
|
|
|
class MediaForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Media
|
|
exclude = ["handle", "sortval", "month1", "year1", "day1",
|
|
"newyear", "calendar", "modifier", "quality", "cache"]
|
|
|
|
def clean(self):
|
|
from webapp.utils import dp
|
|
data = super(MediaForm, self).clean()
|
|
dobj = dp(data.get('text'))
|
|
if not dobj.is_valid():
|
|
msg = u"Invalid date format"
|
|
self._errors["date"] = self.error_class([msg])
|
|
del data["text"]
|
|
return data
|
|
|
|
def save(self, commit=True):
|
|
from webapp.utils import dp
|
|
from webapp.libdjango import DjangoInterface
|
|
dji = DjangoInterface()
|
|
model = super(MediaForm, self).save(commit=False)
|
|
model.mime = gen.mime.get_type(model.path)
|
|
dobj = dp(self.cleaned_data['text'])
|
|
dji.add_date(model, dobj.serialize())
|
|
if commit:
|
|
model.save()
|
|
return model
|
|
|
|
text = forms.CharField(label="Date",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
desc = forms.CharField(label="Title",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
path = forms.CharField(label="Path",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
|
|
class CitationForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Citation
|
|
exclude = ["handle", "sortval", "month1", "year1", "day1",
|
|
"newyear", "calendar", "modifier", "quality", "cache"]
|
|
|
|
def clean(self):
|
|
from webapp.utils import dp
|
|
data = super(CitationForm, self).clean()
|
|
dobj = dp(data.get('text'))
|
|
if not dobj.is_valid():
|
|
msg = u"Invalid date format"
|
|
self._errors["date"] = self.error_class([msg])
|
|
del data["text"]
|
|
return data
|
|
|
|
def save(self, commit=True):
|
|
from webapp.utils import dp
|
|
from webapp.libdjango import DjangoInterface
|
|
dji = DjangoInterface()
|
|
model = super(CitationForm, self).save(commit=False)
|
|
dobj = dp(self.cleaned_data['text'])
|
|
dji.add_date(model, dobj.serialize())
|
|
if commit:
|
|
model.save()
|
|
return model
|
|
|
|
text = forms.CharField(label="Date",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
|
|
class SourceForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Source
|
|
exclude = ["handle", "cache"]
|
|
|
|
class PlaceForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Place
|
|
exclude = ["handle", "cache"]
|
|
|
|
title = forms.CharField(label="Title",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
long = forms.CharField(label="Longitude",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
lat = forms.CharField(label="Latitude",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
|
|
class RepositoryForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Repository
|
|
exclude = ["handle", "cache"]
|
|
|
|
name = forms.CharField(label="Name",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
|
|
class TagForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Tag
|
|
exclude = ["handle"]
|
|
|
|
name = forms.CharField(label="Name",
|
|
required=False,
|
|
widget=TextInput(attrs={'size':'70'}))
|
|
|
|
class EventRefForm(forms.ModelForm):
|
|
class Meta:
|
|
model = EventRef
|
|
|
|
class LogForm(forms.ModelForm):
|
|
error_css_class = 'error'
|
|
|
|
class Meta:
|
|
model = Log
|
|
fields = ["reason"]
|
|
|
|
reason = forms.CharField(label="Reason for change",
|
|
widget=forms.widgets.Textarea(attrs={'rows':'2',
|
|
'cols': '65'}))
|