diff --git a/src/data/templates/view_name_detail.html b/src/data/templates/view_name_detail.html index 2c7aba561..ebbce3788 100644 --- a/src/data/templates/view_name_detail.html +++ b/src/data/templates/view_name_detail.html @@ -27,14 +27,14 @@ {% for error in form.errors %} {{error}}
{% endfor %} -
{% csrf_token %} {% endifequal %} {% endif %} +{% csrf_token %} {{form.surname.label}}: - + {% render form.surname user action %} {{form.prefix.label}}: - + {% render form.prefix user action %} {{form.first_name.label}}: @@ -71,7 +71,8 @@
@@ -96,6 +97,9 @@
  +
+ {% surname_table person user action "/person/%s/name/%s/surname" person.handle form.model.order %} +
{% name_table person user action "/person/%s/name" person.handle %}
@@ -108,18 +112,26 @@ -[Back to Person] + {% if user.is_authenticated %} {% ifequal action "edit" %} - -
+ {% else %} -[Edit Name] -[Delete Name] -[Add Name] + + + {% endifequal %} {% else %} {% endif %} + {% endblock %} diff --git a/src/data/templates/view_person_detail.html b/src/data/templates/view_person_detail.html index 904c4e036..ddbaad247 100644 --- a/src/data/templates/view_person_detail.html +++ b/src/data/templates/view_person_detail.html @@ -25,10 +25,9 @@ {% for error in nameform.errors %} Error in name: {{error}}
{% endfor %} -
{% csrf_token %} {% endifequal %} {% endif %} - +{% csrf_token %} {{nameform|render_name:user}} {{nameform.name_type.label}}: @@ -124,20 +123,19 @@ +{% make_button "Back to People" "/person" %} {% if user.is_authenticated %} {% ifequal action "edit" %} {% make_button "Back to Person" "/person/%s" person.handle %} - -
+ {% else %} -{% make_button "Back to People" "/person/" %} -{% make_button "Add Person" "/person/add" %} -{% make_button "Edit Person" "/person/%s/edit" person.handle %} -{% make_button "Delete Person" "/person/%s/delete" person.handle %} + {% make_button "Edit Person" "/person/%s/edit" person.handle %} + {% make_button "Add Person" "/person/add" %} + {% make_button "Delete Person" "/person/%s/delete" person.handle %} {% endifequal %} {% else %} {% endif %} - + {% endblock %} diff --git a/src/webapp/grampsdb/forms.py b/src/webapp/grampsdb/forms.py index a427554dd..ebd7058bf 100644 --- a/src/webapp/grampsdb/forms.py +++ b/src/webapp/grampsdb/forms.py @@ -47,14 +47,16 @@ class NameForm(forms.ModelForm): "sortval", "newyear", "person"] # Add these because they are TextFields, which render as # Textareas: - surname = forms.CharField(required=False, + surname = forms.CharField(label="Surname", + required=False, widget=TextInput(attrs={'size':'30'})) first_name = forms.CharField(label="Given", required=False, widget=TextInput(attrs={'size':'60'})) title = forms.CharField(required=False, widget=TextInput(attrs={'size':'15'})) - prefix = forms.CharField(required=False, + prefix = forms.CharField(label="Prefix", + required=False, initial='prefix', widget=TextInput(attrs={'size':'15', 'style': 'font-style: italic; color: gray; ', @@ -96,5 +98,5 @@ class NameFormFromPerson(NameForm): #"quality_estimated", "quality_calculated", #"quality_interpreted", "year1", "day1", "month1", - "sortval", "newyear", "person", + "sortval", "newyear", "person", "sort_as", "display_as"] diff --git a/src/webapp/grampsdb/views.py b/src/webapp/grampsdb/views.py index a20a65627..be2889e43 100644 --- a/src/webapp/grampsdb/views.py +++ b/src/webapp/grampsdb/views.py @@ -165,6 +165,39 @@ def set_date(obj): obj.day1, obj.month1, obj.year1, obj.slash1 = 0, 0, 0, 0 obj.day2, obj.month2, obj.year2, obj.slash2 = 0, 0, 0, 0 +def view_surname_detail(request, handle, order, sorder, action="view"): + # /sdjhgsdjhdhgsd/name/1/surname/1 (view) + # /sdjhgsdjhdhgsd/name/1/surname/add + # /sdjhgsdjhdhgsd/name/1/surname/2/[edit|view|add|delete] + if sorder == "add": + sorder = 0 + action = "add" + if request.POST.has_key("action"): + print "override!" + action = request.POST.get("action") + + person = Person.objects.get(handle=handle) + name = person.name_set.filter(order=order)[0] + surname = name.surname_set.filter()[int(sorder) - 1] # sorder is 1-based + form = NameForm(instance=name) + form.model = name + + if action == "save": + active = "view" + + context = RequestContext(request) + context["action"] = action + context["tview"] = _("Surname") + context["handle"] = handle + context["id"] = id + context["person"] = person + context["object"] = person + context["form"] = form + context["order"] = name.order + context["sorder"] = sorder + view_template = 'view_surname_detail.html' + return render_to_response(view_template, context) + def view_name_detail(request, handle, order, action="view"): if order == "add": order = 0 @@ -221,7 +254,7 @@ def view_name_detail(request, handle, order, action="view"): form.model = name if form.is_valid(): # now it is preferred: - if name.preferred: # was preferred, stil must be + if name.preferred: # was preferred, still must be form.cleaned_data["preferred"] = True elif form.cleaned_data["preferred"]: # now is # set all of the other names to be @@ -500,17 +533,24 @@ def view_person_detail(request, view, handle, action="view"): person = Person(handle=create_id()) if person.id: # editing name = person.name_set.get(preferred=True) + surname = name.surname_set.get(primary=True) else: # adding a new person with new name name = Name(person=person, preferred=True) + surname = Surname(name=name, primary=True) + name.surname_set = [surname] pf = PersonForm(request.POST, instance=person) pf.model = person nf = NameFormFromPerson(request.POST, instance=name) nf.model = name if nf.is_valid() and pf.is_valid(): + surname.surname = nf.cleaned_data["surname"] + surname.prefix = nf.cleaned_data["prefix"] + surname.suffix = nf.cleaned_data["suffix"] person = pf.save() name = nf.save(commit=False) name.person = person name.save() + surname.save() else: action = "edit" else: # view diff --git a/src/webapp/urls.py b/src/webapp/urls.py index 1d385a3ef..768ad8249 100644 --- a/src/webapp/urls.py +++ b/src/webapp/urls.py @@ -40,7 +40,8 @@ admin.autodiscover() from webapp.grampsdb.views import (main_page, user_page, logout_page, process_action, view, view_detail, - view_name_detail, browse_page) + view_name_detail, view_surname_detail, + browse_page) urlpatterns = patterns('', # Specific matches first: @@ -76,6 +77,8 @@ urlpatterns += patterns('', (r'^(?P(\w+))/(?P(\w+))/$', view_detail), (r'^person/(?P(\w+))/name/(?P(\w+))$', view_name_detail), (r'^person/(?P(\w+))/name/(?P(\w+))/(?P(\w+))$', view_name_detail), + (r'^person/(?P(\w+))/name/(?P(\w+))/surname/(?P(\w+))$', view_surname_detail), + (r'^person/(?P(\w+))/name/(?P(\w+))/surname/(?P(\w+))/(?P(\w+))$', view_surname_detail), (r'^(?P(\w+))/(?P(\w+))/(?P(\w+))$', process_action), (r'^favicon\.ico$', 'django.views.generic.simple.redirect_to', {'url': '/styles/images/favicon.ico'}), ) diff --git a/src/webapp/utils.py b/src/webapp/utils.py index bff7ffc39..b96d71eb0 100644 --- a/src/webapp/utils.py +++ b/src/webapp/utils.py @@ -75,6 +75,7 @@ util_tags = [ "get_person_from_handle", "event_table", "name_table", + "surname_table", "citation_table", "source_table", "note_table", @@ -213,7 +214,8 @@ _ = lambda text: text def make_button(text, url, *args): url = url % args - return """[ %s ] """ % (url, text) + #return """[ %s ] """ % (url, text) + return """""" % (text, url) def event_table(obj, user, action, url=None, *args): retval = "" @@ -283,6 +285,30 @@ def name_table(obj, user, action, url=None, *args): retval += nbsp("") # to keep tabs same height return retval +def surname_table(obj, user, action, url=None, *args): + person_handle = args[0] + order = args[1] + retval = "" + table = Table() + table.columns(_("Surname"),) + if user.is_authenticated(): + links = [] + count = 1 + name = obj.name_set.filter(order=order)[0] + for surname in name.surname_set.all(): + table.row(surname.surname) + links.append(('URL', + # url is "/person/%s/name/%s/surname" + (url % args) + ("/%s" % count))) + count += 1 + table.links(links) + retval += table.get_html() + if user.is_authenticated() and url and action == "view": + retval += make_button(_("Add surname"), (url + "/add") % args) + else: + retval += nbsp("") # to keep tabs same height + return retval + def source_table(obj, user, action, url=None, *args): retval = "" table = Table()