Media main parts complete

svn: r19656
This commit is contained in:
Doug Blank
2012-05-26 04:32:48 +00:00
parent c2e5e1741b
commit 6919546a0f
5 changed files with 155 additions and 108 deletions

View File

@@ -163,3 +163,39 @@ class NoteForm(forms.ModelForm):
model = Note
exclude = ["handle"]
class MediaForm(forms.ModelForm):
class Meta:
model = Media
exclude = ["handle", "sortval", "month1", "year1", "day1",
"newyear", "calendar", "modifier", "quality"]
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)
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'}))

View File

@@ -413,7 +413,7 @@ class PrimaryObject(models.Model):
## Fields:
id = models.AutoField(primary_key=True)
handle = models.CharField(max_length=19, unique=True)
gramps_id = models.CharField('gramps id', max_length=25, blank=True)
gramps_id = models.CharField('ID', max_length=25, blank=True)
last_saved = models.DateTimeField('last changed', auto_now=True)
last_changed = models.DateTimeField('last changed', null=True,
blank=True) # user edits
@@ -431,7 +431,7 @@ class Person(PrimaryObject):
"""
The model for the person object
"""
gender_type = models.ForeignKey('GenderType')
gender_type = models.ForeignKey('GenderType', verbose_name="Gender")
probably_alive = models.BooleanField("Probably alive")
families = models.ManyToManyField('Family', blank=True, null=True)
parent_families = models.ManyToManyField('Family',
@@ -475,7 +475,7 @@ class Family(PrimaryObject):
null=True, blank=True)
mother = models.ForeignKey('Person', related_name="mother_ref",
null=True, blank=True)
family_rel_type = models.ForeignKey('FamilyRelType')
family_rel_type = models.ForeignKey('FamilyRelType', verbose_name="Type")
tags = models.ManyToManyField('Tag', blank=True, null=True)
def make_tag_list(self):
@@ -515,7 +515,7 @@ class Source(PrimaryObject):
# .datamap_set
class Event(DateObject, PrimaryObject):
event_type = models.ForeignKey('EventType')
event_type = models.ForeignKey('EventType', verbose_name="Type")
description = models.CharField('description', max_length=50, blank=True)
place = models.ForeignKey('Place', null=True, blank=True)
references = generic.GenericRelation('EventRef', related_name="refs",
@@ -549,7 +549,7 @@ class Place(PrimaryObject):
class Media(DateObject, PrimaryObject):
path = models.TextField(blank=True)
mime = models.TextField(blank=True, null=True)
desc = models.TextField(blank=True)
desc = models.TextField("Title", blank=True)
references = generic.GenericRelation('MediaRef', related_name="refs",
content_type_field="object_type",
object_id_field="object_id")
@@ -559,7 +559,7 @@ class Media(DateObject, PrimaryObject):
return tuple()
class Note(PrimaryObject):
note_type = models.ForeignKey('NoteType')
note_type = models.ForeignKey('NoteType', verbose_name="Type")
text = models.TextField(blank=True)
preformatted = models.BooleanField('preformatted')
references = generic.GenericRelation('NoteRef', related_name="refs",
@@ -595,6 +595,7 @@ class Surname(models.Model):
Surname table, which links to name.
"""
name_origin_type = models.ForeignKey('NameOriginType',
verbose_name="Origin",
related_name="name_origin_code",
default=2)
surname = models.TextField(blank=True)
@@ -608,7 +609,7 @@ class Surname(models.Model):
return "%s" % self.surname
class Name(DateObject, SecondaryObject):
name_type = models.ForeignKey('NameType',
name_type = models.ForeignKey('NameType', verbose_name="Type",
related_name="name_code",
default=2)
preferred = models.BooleanField('Preferred name?')

View File

@@ -22,7 +22,7 @@
""" Views for Person, Name, and Surname """
## Gramps Modules
from webapp.utils import _, boolean
from webapp.utils import _, boolean, update_last_changed
from webapp.grampsdb.models import Media
from webapp.grampsdb.forms import *
from webapp.libdjango import DjangoInterface
@@ -41,88 +41,54 @@ def process_media(request, context, handle, action): # view, edit, save
context["tview"] = _("Media")
context["tviews"] = _("Media")
context["action"] = "view"
context["object"] = Media()
view_template = "view_media_detail.html"
return render_to_response(view_template, context)
if request.user.is_authenticated():
if action in ["edit", "view"]:
pf, nf, sf, person = get_person_forms(handle, empty=False)
elif action == "add":
pf, nf, sf, person = get_person_forms(handle=None, protect=False, empty=True)
elif action == "delete":
pf, nf, sf, person = get_person_forms(handle, protect=False, empty=True)
person.delete()
return redirect("/person/")
elif action in ["save", "create"]: # could be create a new person
# look up old data, if any:
if handle:
person = Person.objects.get(handle=handle)
name = person.name_set.get(preferred=True)
surname = name.surname_set.get(primary=True)
else: # create new item
person = Person(handle=create_id())
name = Name(person=person, preferred=True)
surname = Surname(name=name, primary=True, order=1)
surname = Surname(name=name,
primary=True,
order=1,
name_origin_type=NameOriginType.objects.get(val=NameOriginType._DEFAULT[0]))
# combine with user data:
pf = PersonForm(request.POST, instance=person)
pf.model = person
nf = NameFormFromPerson(request.POST, instance=name)
nf.model = name
sf = SurnameForm(request.POST, instance=surname)
# check if valid:
if nf.is_valid() and pf.is_valid() and sf.is_valid():
# name.preferred and surname.primary get set False in the above is_valid()
person = pf.save()
# Process data:
name.person = person
name = nf.save(commit=False)
# Manually set any data:
name.suffix = nf.cleaned_data["suffix"] if nf.cleaned_data["suffix"] != " suffix " else ""
name.preferred = True # FIXME: why is this False?
check_preferred(name, person)
name.save()
# Process data:
surname.name = name
surname = sf.save(commit=False)
# Manually set any data:
surname.prefix = sf.cleaned_data["prefix"] if sf.cleaned_data["prefix"] != " prefix " else ""
surname.primary = True # FIXME: why is this False?
surname.save()
# FIXME: last_saved, last_changed, last_changed_by
dji.rebuild_cache(person)
# FIXME: update probably_alive
return redirect("/person/%s" % person.handle)
else:
# need to edit again
if handle:
action = "edit"
else:
action = "add"
else: # error?
raise Http404(_("Requested %s does not exist.") % "person")
else: # not authenticated
# BEGIN NON-AUTHENTICATED ACCESS
try:
person = Person.objects.get(handle=handle)
except:
raise Http404(_("Requested %s does not exist.") % "person")
if person.private:
raise Http404(_("Requested %s does not exist.") % "person")
pf, nf, sf, person = get_person_forms(handle, protect=True)
# END NON-AUTHENTICATED ACCESS
context["action"] = action
context["view"] = "person"
context["tview"] = _("Person")
context["tviews"] = _("People")
context["personform"] = pf
context["nameform"] = nf
context["surnameform"] = sf
context["person"] = person
context["object"] = person
context["next"] = "/person/%s" % person.handle
if handle == "add":
action = "add"
if request.POST.has_key("action"):
action = request.POST.get("action")
# Handle: edit, view, add, create, save, delete
if action == "add":
media = Media()
mediaform = MediaForm(instance=media)
mediaform.model = media
elif action in ["view", "edit"]:
media = Media.objects.get(handle=handle)
mediaform = MediaForm(instance=media)
mediaform.model = media
elif action == "save":
media = Media.objects.get(handle=handle)
mediaform = MediaForm(request.POST, instance=media)
mediaform.model = media
if mediaform.is_valid():
update_last_changed(media, request.user.username)
media = mediaform.save()
dji.rebuild_cache(media)
action = "view"
else:
action = "edit"
elif action == "create":
media = Media(handle=create_id())
mediaform = MediaForm(request.POST, instance=media)
mediaform.model = media
if mediaform.is_valid():
update_last_changed(media, request.user.username)
media = mediaform.save()
dji.rebuild_cache(media)
action = "view"
else:
action = "add"
elif action == "delete":
media = Media.objects.get(handle=handle)
media.delete()
return redirect("/media/")
else:
raise Exception("Unhandled action: '%s'" % action)
context["mediaform"] = mediaform
context["object"] = media
context["media"] = media
context["action"] = action
return render_to_response(view_template, context)