From d0318dd1a25fb0fcd13f9b1824cbb8d3aad856e5 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Thu, 17 Dec 2009 04:10:41 +0000 Subject: [PATCH] Some basic name editing; moved forms to web/grampsdb svn: r13833 --- src/data/templates/view_name_detail.html | 43 ++++++++++++++---------- src/web/{ => grampsdb}/forms.py | 5 ++- src/web/grampsdb/templatetags/my_tags.py | 5 ++- src/web/grampsdb/views.py | 38 ++++++++++++++++++--- src/web/utils.py | 21 ++++++++++-- 5 files changed, 85 insertions(+), 27 deletions(-) rename src/web/{ => grampsdb}/forms.py (94%) diff --git a/src/data/templates/view_name_detail.html b/src/data/templates/view_name_detail.html index e622e246b..356b83fbe 100644 --- a/src/data/templates/view_name_detail.html +++ b/src/data/templates/view_name_detail.html @@ -11,7 +11,7 @@
-

NAME{# form|make_name:user #}

+

{{form|make_name:user}}

{% comment %} 4 cols {% endcomment %} @@ -24,27 +24,34 @@ {% endifequal %} - + - + - + - + - + - + - + - + + + +{% if form.model.preferred %} + +{% else %} + +{% endif %}
Family:{{form.surname.label}}: {{form.surname|render:action}}Prefix:{{form.prefix.label}}: {{form.prefix|render:action}}
Given:{{form.first_name.label}}: {{form.first_name|render:action}}Call Name:{{form.call.label}}: {{form.call|render:action}}
Title:{{form.title.label}}: {{form.title|render:action}}Suffix:{{form.suffix.label}}: {{form.suffix|render:action}}
Patronymic:{{form.patronymic.label}}: {{form.patronymic|render:action}}Type:{{form.name_type.label}}: {{form.name_type|render:action}}
{{form.preferred.label}}:True{{form.preferred|render:action}}
@@ -52,25 +59,25 @@ {% else %} - Family: + {{form.surname.label}}: {{form.surname}} - Prefix: + {{form.prefix.label}}: [Private] - Given: + {{form.given.label}}: [Private] - Call Name: + {{form.call.label}}: [Private] - Title: + {{form.title.label}}: [Private] - Suffix: + {{form.suffix.label}}: [Private] - Patronymic: + {{form.patronymic.label}}: [Private] - Type: + {{form.name_type.label}}: {{form.name_type}} @@ -105,7 +112,7 @@ {% else %} [Edit Name] [Delete Name] -[Add Name] +[Add Name] {% endifequal %} {% else %} {% endif %} diff --git a/src/web/forms.py b/src/web/grampsdb/forms.py similarity index 94% rename from src/web/forms.py rename to src/web/grampsdb/forms.py index 755932c95..7e93e3c67 100644 --- a/src/web/forms.py +++ b/src/web/grampsdb/forms.py @@ -21,7 +21,10 @@ class NameForm(forms.ModelForm): class Meta: model = Name fields = ("suffix", "first_name", "title", "prefix", - "call", "surname", "patronymic", "name_type") + "call", "surname", "patronymic", "name_type", + "preferred") + # Add these because they are TextFields, which render as + # Textareas: surname = forms.CharField(required=False, widget=TextInput()) first_name = forms.CharField(required=False, widget=TextInput()) title = forms.CharField(required=False, widget=TextInput()) diff --git a/src/web/grampsdb/templatetags/my_tags.py b/src/web/grampsdb/templatetags/my_tags.py index 403677c9f..f2f8337cf 100644 --- a/src/web/grampsdb/templatetags/my_tags.py +++ b/src/web/grampsdb/templatetags/my_tags.py @@ -49,7 +49,10 @@ make_name.is_safe = True register.filter('make_name', make_name) def preferred(name_set, attr): - name = name_set.get(preferred=True) + try: + name = name_set.get(preferred=True) + except: + return "[No preferred name]" if name: return escape(getattr(name, attr)) else: diff --git a/src/web/grampsdb/views.py b/src/web/grampsdb/views.py index eb59e19a3..7e33391c8 100644 --- a/src/web/grampsdb/views.py +++ b/src/web/grampsdb/views.py @@ -41,11 +41,11 @@ from django.db.models import Q #------------------------------------------------------------------------ import web from web.grampsdb.models import * -from web.forms import NameForm +from web.grampsdb.forms import NameForm _ = lambda text: text -# Views: [(Nice name plural, /name/handle, Model), ] +# Views: [(, //handle, ), ] VIEWS = [(_('People'), 'person', Name), (_('Families'), 'family', Family), (_('Events'), 'event', Event), @@ -104,6 +104,9 @@ def user_page(request, username): return render_to_response('user_page.html', context) def view_name_detail(request, handle, order, action="view"): + if order == "add": + order = 0 + action = "add" if request.POST.has_key("action"): action = request.POST.get("action") if action == "view": @@ -117,15 +120,39 @@ def view_name_detail(request, handle, order, action="view"): form = NameForm(instance=name) form.model = name elif action == "delete": - pass + person = Person.objects.get(handle=handle) + person.name_set.get(order=order).delete() + action = "back" elif action == "add": - pass + person = Person.objects.get(handle=handle) + name = Name() + form = NameForm() + form.model = name + action = "edit" + elif action == "new": + person = Person.objects.get(handle=handle) + form = NameForm(request.POST) + if form.is_valid(): + name.save() + action = "save" + else: + action = "edit" elif action == "save": person = Person.objects.get(handle=handle) name = person.name_set.get(order=order) form = NameForm(request.POST, instance=name) form.model = name if form.is_valid(): + # now it is preferred: + if form.cleaned_data["preferred"]: + # but it wasn't: + if not name.preferred: + # set all of the other names to be + # not preferred: + person.name_set.filter(~ Q(id=name.id)) \ + .update(preferred=False) + # else it always was + # else some other name is preferred form.save() else: action = "edit" @@ -144,6 +171,9 @@ def view_name_detail(request, handle, order, action="view"): context["action"] = "view" return redirect("/person/%s/name/%d" % (person.handle, name.order), context) + elif action == "back": + return redirect("/person/%s/" % + (person.handle), context) else: return render_to_response(view_template, context) diff --git a/src/web/utils.py b/src/web/utils.py index f33171e7f..0b4ad2e2f 100644 --- a/src/web/utils.py +++ b/src/web/utils.py @@ -27,6 +27,7 @@ # #------------------------------------------------------------------------ import web.grampsdb.models as models +import web.grampsdb.forms as forms from web import libdjango from web.djangodb import DjangoDb from Simple import SimpleTable, SimpleAccess, make_basic_stylesheet @@ -123,9 +124,9 @@ _ = lambda text: text def render(formfield, action): retval = "error" - name = formfield.name # 'surname' + fieldname = formfield.name # 'surname' if action == "view": # gets the unicode from model - retval = str(getattr(formfield.form.model, name)) + retval = str(getattr(formfield.form.model, fieldname)) else: # renders as default retval = formfield.as_widget() return retval @@ -449,8 +450,22 @@ def make_name(name, user): return "%s, %s" % (surname, "[Living]") else: return "%s, %s" % (surname, name.first_name) + elif isinstance(name, forms.NameForm): + surname = name.model.surname.strip() + if not surname: + surname = "[Missing]" + if user.is_authenticated(): + return "%s, %s" % (surname, name.model.first_name) + else: + if probably_alive(name.model.person.handle): + return "%s, %s" % (surname, "[Living]") + else: + return "%s, %s" % (surname, name.model.first_name) elif name: # name_set - name = name.get(preferred=True) + try: + name = name.get(preferred=True) + except: + return "[No preferred name]" if name: return make_name(name, user) else: