Latest advancement in privacy issues; reworked proxy + forms
svn: r13929
This commit is contained in:
@ -83,25 +83,25 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-children">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-children">
|
||||||
<!-- Events -->
|
<!-- Events -->
|
||||||
{{ family|family_children_table:user|safe }}
|
{% children_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-events">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-events">
|
||||||
{{ family|family_event_table:user|safe }}
|
{% event_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
||||||
{{ family|source_table:user|safe }}
|
{% source_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes">
|
||||||
{{ family|family_attribute_table:user|safe }}
|
{% attribute_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes">
|
||||||
{{ family|family_note_table:user|safe }}
|
{% note_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-gallery">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-gallery">
|
||||||
{{ family|family_gallery_table:user|safe }}
|
{% gallery_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds">
|
||||||
{{ family|family_lds_table:user|safe }}
|
{% lds_table family user action "/family/%s/children" family.handle %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="content" id="IndividualDetail">
|
<div class="content" id="IndividualDetail">
|
||||||
<h3>Name for Person [{{person.gramps_id}}]</h3>
|
<h3>{{person|make_name:user}} [{{person.gramps_id}}]</h3>
|
||||||
<div id="summaryarea">
|
<div id="summaryarea">
|
||||||
<table class="infolist"> {% comment %} 4 cols {% endcomment %}
|
<table class="infolist"> {% comment %} 4 cols {% endcomment %}
|
||||||
<tbody>
|
<tbody>
|
||||||
@ -69,26 +69,32 @@
|
|||||||
<li class="ui-corner-top ui-state-default"><a href="#tab-notes">Notes</a></li>
|
<li class="ui-corner-top ui-state-default"><a href="#tab-notes">Notes</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-general">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom"
|
||||||
<table>
|
id="tab-general">
|
||||||
<tr><td>{{form.group_as.label}}: </td>
|
<div style="overflow: auto; height:150px; color: black; background-color: white;">
|
||||||
|
<table border="1">
|
||||||
|
<tr><td style="background-color: #FFF2C5;">{{form.group_as.label}}: </td>
|
||||||
<td>{{form.group_as|render:action}}</td>
|
<td>{{form.group_as|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>{{form.sort_as.label}}: </td>
|
<tr><td style="background-color: #FFF2C5;">{{form.sort_as.label}}: </td>
|
||||||
<td>{{form.sort_as|render:action}}</td>
|
<td>{{form.sort_as|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>{{form.display_as.label}}: </td>
|
<tr><td style="background-color: #FFF2C5;">{{form.display_as.label}}: </td>
|
||||||
<td>{{form.display_as|render:action}}</td>
|
<td>{{form.display_as|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>{{form.text.label}}: </td>
|
<tr><td style="background-color: #FFF2C5;">{{form.text.label}}: </td>
|
||||||
<td>{{form.text|render:action}}</td>
|
<td>{{form.text|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
||||||
{% source_table form.model user action "/person/%s/name/%s/source/add" person.handle form.model.order %}
|
{% source_table form.model user action "/person/%s/name/%s/source" person.handle form.model.order %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom
|
||||||
|
ui-tabs-hide" id="tab-notes">
|
||||||
|
{% note_table form.model user action "/person/%s/name/%s/note" person.handle form.model.order %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
{% if person %}
|
{% if person %}
|
||||||
<td><a href="{{person.handle}}/" class="noThumb">{{ forloop.counter|row_count:page }}</a>
|
<td><a href="{{person.handle}}/" class="noThumb">{{ forloop.counter|row_count:page }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{{person.handle}}/" class="noThumb">{{person|make_name}}</a>
|
<td><a href="{{person.handle}}/" class="noThumb">{{person|make_name:user}}</a>
|
||||||
</td>
|
</td>
|
||||||
<td><a href="{{person.handle}}/" class="grampsid">[{{person.gramps_id}}]</a></td>
|
<td><a href="{{person.handle}}/" class="grampsid">[{{person.gramps_id}}]</a></td>
|
||||||
<td><a href="{{person.handle}}/" class="noThumb">{{person.gender_type}}</a></td>
|
<td><a href="{{person.handle}}/" class="noThumb">{{person.gender_type}}</a></td>
|
||||||
|
@ -11,49 +11,61 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="content" id="IndividualDetail">
|
<div class="content" id="IndividualDetail">
|
||||||
<h3></h3>
|
<h3>{{nameform|make_name:user}} [{{person.gramps_id}}]</h3>
|
||||||
<div id="summaryarea">
|
<div id="summaryarea">
|
||||||
<table class="infolist"> {% comment %} 5 cols {% endcomment %}
|
<table class="infolist"> {% comment %} 5 cols {% endcomment %}
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
{% ifequal action "edit" %}
|
||||||
|
{% for error in personform.errors %}
|
||||||
|
{{error}}<br>
|
||||||
|
{% endfor %}
|
||||||
|
{% for error in nameform.errors %}
|
||||||
|
{{error}}<br>
|
||||||
|
{% endfor %}
|
||||||
|
<form method="post">
|
||||||
|
{% endifequal %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">Family:</td>
|
<td class="ColumnAttribute">{{nameform.surname.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.surname}}</td>
|
<td class="ColumnValue" id="data">{{nameform.surname|render:action}}</td>
|
||||||
<td class="ColumnAttribute">Prefix:</td>
|
<td class="ColumnAttribute">{{nameform.prefix.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.prefix}}</td>
|
<td class="ColumnValue" id="data">{{nameform.prefix|render:action}}</td>
|
||||||
<td rowspan="6" colspan="2" style="border:solid 2px #7D5925;">Image:</td>
|
<td rowspan="6" colspan="2" style="border:solid 2px #7D5925;">Image:</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute" colspan="2"></td>
|
<td class="ColumnAttribute" colspan="2"></td>
|
||||||
<td class="ColumnAttribute">Suffix:</td>
|
<td class="ColumnAttribute">{{nameform.suffix.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.suffix}}</td>
|
<td class="ColumnValue" id="data">{{nameform.suffix|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">Given:</td>
|
<td class="ColumnAttribute">{{nameform.first_name.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.first_name}}</td>
|
<td class="ColumnValue" id="data">{{nameform.first_name|render:action}}</td>
|
||||||
<td class="ColumnAttribute">Call Name:</td>
|
<td class="ColumnAttribute">{{nameform.call.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.call}}</td>
|
<td class="ColumnValue" id="data">{{nameform.call|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">Type:</td>
|
<td class="ColumnAttribute">{{nameform.name_type.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.name_type}}</td>
|
<td class="ColumnValue" id="data">{{nameform.name_type|render:action}}</td>
|
||||||
<td class="ColumnAttribute">Patronymic:</td>
|
<td class="ColumnAttribute">{{nameform.patronymic.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.patronymic}}</td>
|
<td class="ColumnValue" id="data">{{nameform.patronymic|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute" colspan="2"></td>
|
<td class="ColumnAttribute" colspan="2"></td>
|
||||||
<td class="ColumnAttribute">Title:</td>
|
<td class="ColumnAttribute">{{nameform.title.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{name.title}}</td>
|
<td class="ColumnValue" id="data">{{nameform.title|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">Gender:</td>
|
<td class="ColumnAttribute">{{personform.gender_type.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{person.gender_type}}</td>
|
<td class="ColumnValue" id="data">{{personform.gender_type|render:action}}</td>
|
||||||
<td class="ColumnAttribute">ID:</td>
|
<td class="ColumnAttribute">{{personform.gramps_id.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{person.gramps_id}}</td>
|
<td class="ColumnValue" id="data">{{personform.gramps_id|render:action}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="ColumnAttribute">Marker:</td>
|
<td class="ColumnAttribute">{{personform.marker_type.label}}</td>
|
||||||
<td class="ColumnValue" id="data">{{person.marker_type}}</td>
|
<td class="ColumnValue" id="data">{{personform.marker_type|render:action}}</td>
|
||||||
<td class="ColumnAttribute" colspan="3"></td>
|
<td class="ColumnAttribute" colspan="3"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -80,40 +92,54 @@
|
|||||||
</ul>
|
</ul>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-events">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tab-events">
|
||||||
<!-- Events -->
|
<!-- Events -->
|
||||||
{{ person|person_event_table:user|safe }}
|
{% event_table person user action "/person/%s/event" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-names">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-names">
|
||||||
{{ person|person_name_table:user|safe }}
|
{% name_table person user action "/person/%s/name" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-sources">
|
||||||
{% source_table person user action "/person/%s/source/add" person.handle %}
|
{% source_table person user action "/person/%s/source" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-attributes">
|
||||||
{{ person|person_attribute_table:user|safe }}
|
{% attribute_table person user action "/person/%s/attribute" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-addresses">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-addresses">
|
||||||
{{ person|person_address_table:user|safe }}
|
{% address_table person user action "/person/%s/address" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-notes">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom
|
||||||
{{ person|person_note_table:user|safe }}
|
ui-tabs-hide" id="tab-notes">
|
||||||
|
{% note_table person user action "/person/%s/note" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-gallery">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-gallery">
|
||||||
{{ person|person_gallery_table:user|safe }}
|
{% gallery_table person user action "/person/%s/gallery" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-internet">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-internet">
|
||||||
{{ person|person_internet_table:user|safe }}
|
{% internet_table person user action "/person/%s/internet" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-association">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-association">
|
||||||
{{ person|person_association_table:user|safe }}
|
{% association_table person user action "/person/%s/association" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-lds">
|
||||||
{{ person|person_lds_table:user|safe }}
|
{% lds_table person user action "/person/%s/lds" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-references">
|
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tab-references">
|
||||||
{{ person|person_reference_table:user|safe }}
|
{% reference_table person user action "/person/%s/reference" person.handle %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if user.is_authenticated %}
|
||||||
|
{% ifequal action "edit" %}
|
||||||
|
{% make_button "Back to Person" "/person/%s" person.handle %}
|
||||||
|
<input type="hidden" name="action" value="save"/>
|
||||||
|
<input type="submit" value="Submit"/>
|
||||||
|
</form>
|
||||||
|
{% else %}
|
||||||
|
{% make_button "Back to People" "/person/" %}
|
||||||
|
{% make_button "Edit Person" "/person/%s/edit" person.handle %}
|
||||||
|
{% make_button "Delete Person" "/person/%s/delete" person.handle %}
|
||||||
|
{% endifequal %}
|
||||||
|
{% else %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
@ -92,9 +92,17 @@ class DjangoDb(DbReadBase, DbWriteBase):
|
|||||||
return obj
|
return obj
|
||||||
|
|
||||||
def get_place_from_handle(self, handle):
|
def get_place_from_handle(self, handle):
|
||||||
obj = gen.lib.Place()
|
try:
|
||||||
obj.unserialize(self.dji.get_place(self.dji.Place.get(handle=handle)))
|
dji_obj = self.dji.Place.get(handle=handle)
|
||||||
return obj
|
except:
|
||||||
|
dji_obj = None
|
||||||
|
if dji_obj:
|
||||||
|
tuple_obj = self.dji.get_place(dji_obj)
|
||||||
|
if tuple_obj:
|
||||||
|
obj = gen.lib.Place()
|
||||||
|
obj.unserialize(tuple_obj)
|
||||||
|
return obj
|
||||||
|
return None
|
||||||
|
|
||||||
def get_source_from_handle(self, handle):
|
def get_source_from_handle(self, handle):
|
||||||
obj = gen.lib.Source()
|
obj = gen.lib.Source()
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"setting" : "db_created" ,
|
"setting" : "db_created" ,
|
||||||
"description" : "database creation date/time" ,
|
"description" : "database creation date/time" ,
|
||||||
"value_type" : "str" ,
|
"value_type" : "str" ,
|
||||||
"value" : "2009-12-26 00:38"
|
"value" : "2009-12-26 08:01"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,6 @@ import datetime
|
|||||||
class PersonForm(forms.ModelForm):
|
class PersonForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Person
|
model = Person
|
||||||
exclude = ('handle',)
|
|
||||||
|
|
||||||
'''def clean(self):
|
'''def clean(self):
|
||||||
cleaned_data['last_changed'] = datetime.datetime.now()
|
cleaned_data['last_changed'] = datetime.datetime.now()
|
||||||
|
@ -8,16 +8,6 @@ import web.utils
|
|||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|
||||||
for filter_name in util_filters:
|
|
||||||
func = getattr(web.utils, filter_name)
|
|
||||||
func.is_safe = True
|
|
||||||
register.filter(filter_name, func)
|
|
||||||
|
|
||||||
def get_person_from_handle(db, handle):
|
|
||||||
# db is a Gramps Db interface
|
|
||||||
# handle is a Person Handle
|
|
||||||
return db.get_person_from_handle(handle)
|
|
||||||
|
|
||||||
class TemplateNode(template.Node):
|
class TemplateNode(template.Node):
|
||||||
def __init__(self, args, var_name, func):
|
def __init__(self, args, var_name, func):
|
||||||
self.args = map(template.Variable, args)
|
self.args = map(template.Variable, args)
|
||||||
@ -33,8 +23,7 @@ class TemplateNode(template.Node):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def parse_tokens(tokens):
|
def parse_tokens(tokens):
|
||||||
# Splitting by None splits by spaces
|
items = tokens.split_contents()
|
||||||
items = tokens.contents.split(None)
|
|
||||||
# {% tag_name arg1 arg2 arg3 as variable %}
|
# {% tag_name arg1 arg2 arg3 as variable %}
|
||||||
# {% tag_name arg1 arg2 arg3 %}
|
# {% tag_name arg1 arg2 arg3 %}
|
||||||
tag_name = items[0]
|
tag_name = items[0]
|
||||||
@ -52,11 +41,14 @@ def make_tag(func):
|
|||||||
return TemplateNode(args, var_name, func)
|
return TemplateNode(args, var_name, func)
|
||||||
return do_func
|
return do_func
|
||||||
|
|
||||||
register.tag("get_person_from_handle",
|
for filter_name in util_filters:
|
||||||
make_tag(get_person_from_handle))
|
func = getattr(web.utils, filter_name)
|
||||||
|
func.is_safe = True
|
||||||
|
register.filter(filter_name, func)
|
||||||
|
|
||||||
register.tag("source_table",
|
for tag_name in util_tags:
|
||||||
make_tag(source_table))
|
func = getattr(web.utils, tag_name)
|
||||||
|
register.tag(tag_name, make_tag(func))
|
||||||
|
|
||||||
probably_alive.is_safe = True
|
probably_alive.is_safe = True
|
||||||
register.filter('probably_alive', probably_alive)
|
register.filter('probably_alive', probably_alive)
|
||||||
|
@ -41,11 +41,11 @@ from django.db.models import Q
|
|||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
import web
|
import web
|
||||||
from web.grampsdb.models import *
|
from web.grampsdb.models import *
|
||||||
from web.grampsdb.forms import NameForm
|
from web.grampsdb.forms import NameForm, PersonForm
|
||||||
from web.utils import probably_alive
|
from web.utils import probably_alive
|
||||||
from web.djangodb import DjangoDb
|
from web.djangodb import DjangoDb
|
||||||
|
|
||||||
from gen.proxy import LivingProxyDb
|
import gen.proxy
|
||||||
|
|
||||||
_ = lambda text: text
|
_ = lambda text: text
|
||||||
|
|
||||||
@ -207,8 +207,9 @@ class PrivateProxy(object):
|
|||||||
def __getattr__(self, attr):
|
def __getattr__(self, attr):
|
||||||
return getattr(self.obj, attr)
|
return getattr(self.obj, attr)
|
||||||
|
|
||||||
def view_detail(request, view, handle):
|
def view_detail(request, view, handle, action="view"):
|
||||||
context = RequestContext(request)
|
context = RequestContext(request)
|
||||||
|
context["action"] = action
|
||||||
context["view"] = view
|
context["view"] = view
|
||||||
if view == "event":
|
if view == "event":
|
||||||
try:
|
try:
|
||||||
@ -239,24 +240,7 @@ def view_detail(request, view, handle):
|
|||||||
view_template = 'view_note_detail.html'
|
view_template = 'view_note_detail.html'
|
||||||
context["tview"] = _("Note")
|
context["tview"] = _("Note")
|
||||||
elif view == "person":
|
elif view == "person":
|
||||||
try:
|
return view_person_detail(request, view, handle, action)
|
||||||
obj = Person.objects.get(handle=handle)
|
|
||||||
except:
|
|
||||||
raise Http404(_("Requested %s does not exist.") % view)
|
|
||||||
view_template = 'view_person_detail.html'
|
|
||||||
person = obj
|
|
||||||
name = person.get_primary_name()
|
|
||||||
if request.user.is_authenticated():
|
|
||||||
pass # see everything, no limits
|
|
||||||
elif probably_alive(person.handle):
|
|
||||||
name.first_name = "[Living]"
|
|
||||||
elif person.private:
|
|
||||||
name = Name()
|
|
||||||
name.surname = "[Private]"
|
|
||||||
name.first_name = "[Private]"
|
|
||||||
# FIXME: protect everything else; what if name.private?
|
|
||||||
context["name"] = name
|
|
||||||
context["tview"] = _("Person")
|
|
||||||
elif view == "place":
|
elif view == "place":
|
||||||
try:
|
try:
|
||||||
obj = Place.objects.get(handle=handle)
|
obj = Place.objects.get(handle=handle)
|
||||||
@ -281,19 +265,56 @@ def view_detail(request, view, handle):
|
|||||||
else:
|
else:
|
||||||
raise Http404(_("Requested page type not known"))
|
raise Http404(_("Requested page type not known"))
|
||||||
context[view] = obj
|
context[view] = obj
|
||||||
context["action"] = "view"
|
return render_to_response(view_template, context)
|
||||||
|
|
||||||
|
def get_gramps_db(request):
|
||||||
|
dbase = DjangoDb()
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
private_filter=False
|
||||||
|
living_filter=False
|
||||||
|
else:
|
||||||
|
private_filter=True
|
||||||
|
living_filter=True
|
||||||
|
# If the private flag is set, apply the PrivateProxyDb
|
||||||
|
if private_filter:
|
||||||
|
dbase = gen.proxy.PrivateProxyDb(dbase)
|
||||||
|
# If the restrict flag is set, apply the LivingProxyDb
|
||||||
|
if living_filter:
|
||||||
|
dbase = gen.proxy.LivingProxyDb(
|
||||||
|
dbase,
|
||||||
|
gen.proxy.LivingProxyDb.MODE_INCLUDE_LAST_NAME_ONLY)
|
||||||
|
return dbase
|
||||||
|
|
||||||
|
def view_person_detail(request, view, handle, action="view"):
|
||||||
|
context = RequestContext(request)
|
||||||
|
context["action"] = action
|
||||||
|
context["view"] = view
|
||||||
|
context["tview"] = _("Person")
|
||||||
|
view_template = 'view_person_detail.html'
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
person = Person.objects.get(handle=handle)
|
||||||
|
name = person.name_set.get(preferred=True)
|
||||||
|
else:
|
||||||
|
db = get_gramps_db(request)
|
||||||
|
gramps_person = db.get_person_from_handle(handle)
|
||||||
|
if not gramps_person:
|
||||||
|
raise Http404(_("Requested %s is not accessible.") % view)
|
||||||
|
person = Person.objects.get(handle=handle)
|
||||||
|
name = person.name_set.get(preferred=True)
|
||||||
|
# fill forms with data from db
|
||||||
|
name.surname = gramps_person.get_primary_name().get_surname()
|
||||||
|
name.first_name = gramps_person.get_primary_name().get_first_name()
|
||||||
|
pf = PersonForm(instance=person)
|
||||||
|
pf.model = person
|
||||||
|
nf = NameForm(instance=name)
|
||||||
|
nf.model = name
|
||||||
|
context["personform"] = pf
|
||||||
|
context["nameform"] = nf
|
||||||
|
context["person"] = person
|
||||||
return render_to_response(view_template, context)
|
return render_to_response(view_template, context)
|
||||||
|
|
||||||
def view(request, view):
|
def view(request, view):
|
||||||
db_direct = DjangoDb()
|
db = get_gramps_db(request)
|
||||||
if not request.user.is_authenticated():
|
|
||||||
#MODE_EXCLUDE_ALL = 0
|
|
||||||
#MODE_INCLUDE_LAST_NAME_ONLY = 1
|
|
||||||
#MODE_INCLUDE_FULL_NAME_ONLY = 2
|
|
||||||
db = LivingProxyDb(db_direct,
|
|
||||||
LivingProxyDb.MODE_INCLUDE_LAST_NAME_ONLY)
|
|
||||||
else:
|
|
||||||
db = db_direct
|
|
||||||
search = ""
|
search = ""
|
||||||
if view == "event":
|
if view == "event":
|
||||||
if request.user.is_authenticated():
|
if request.user.is_authenticated():
|
||||||
@ -315,9 +336,9 @@ def view(request, view):
|
|||||||
view_template = 'view_events.html'
|
view_template = 'view_events.html'
|
||||||
total = Event.objects.all().count()
|
total = Event.objects.all().count()
|
||||||
elif view == "family":
|
elif view == "family":
|
||||||
if request.GET.has_key("search"):
|
if request.user.is_authenticated():
|
||||||
search = request.GET.get("search")
|
if request.GET.has_key("search"):
|
||||||
if request.user.is_authenticated():
|
search = request.GET.get("search")
|
||||||
if "," in search:
|
if "," in search:
|
||||||
surname, first = [term.strip() for term in
|
surname, first = [term.strip() for term in
|
||||||
search.split(",", 1)]
|
search.split(",", 1)]
|
||||||
@ -338,8 +359,12 @@ def view(request, view):
|
|||||||
Q(mother__name__first_name__istartswith=search)
|
Q(mother__name__first_name__istartswith=search)
|
||||||
) \
|
) \
|
||||||
.order_by("gramps_id")
|
.order_by("gramps_id")
|
||||||
else:
|
else: # no search
|
||||||
# NON-AUTHENTICATED users
|
object_list = Family.objects.all().order_by("gramps_id")
|
||||||
|
else:
|
||||||
|
# NON-AUTHENTICATED users
|
||||||
|
if request.GET.has_key("search"):
|
||||||
|
search = request.GET.get("search")
|
||||||
if "," in search:
|
if "," in search:
|
||||||
search, trash = [term.strip() for term in search.split(",", 1)]
|
search, trash = [term.strip() for term in search.split(",", 1)]
|
||||||
object_list = Family.objects \
|
object_list = Family.objects \
|
||||||
@ -347,15 +372,18 @@ def view(request, view):
|
|||||||
Q(family_rel_type__name__icontains=search) |
|
Q(family_rel_type__name__icontains=search) |
|
||||||
Q(father__name__surname__istartswith=search) |
|
Q(father__name__surname__istartswith=search) |
|
||||||
Q(mother__name__surname__istartswith=search)) &
|
Q(mother__name__surname__istartswith=search)) &
|
||||||
Q(private=False)
|
Q(private=False) &
|
||||||
|
Q(mother__private=False) &
|
||||||
|
Q(father__private=False)
|
||||||
) \
|
) \
|
||||||
.order_by("gramps_id")
|
.order_by("gramps_id")
|
||||||
else: # no search
|
|
||||||
if request.user.is_authenticated():
|
|
||||||
object_list = Family.objects.all().order_by("gramps_id")
|
|
||||||
else:
|
else:
|
||||||
# NON-AUTHENTICATED users
|
object_list = Family.objects \
|
||||||
object_list = Family.objects.filter(private=False).order_by("gramps_id")
|
.filter(Q(private=False) &
|
||||||
|
Q(mother__private=False) &
|
||||||
|
Q(father__private=False)
|
||||||
|
) \
|
||||||
|
.order_by("gramps_id")
|
||||||
view_template = 'view_families.html'
|
view_template = 'view_families.html'
|
||||||
total = Family.objects.all().count()
|
total = Family.objects.all().count()
|
||||||
elif view == "media":
|
elif view == "media":
|
||||||
@ -395,9 +423,9 @@ def view(request, view):
|
|||||||
view_template = 'view_notes.html'
|
view_template = 'view_notes.html'
|
||||||
total = Note.objects.all().count()
|
total = Note.objects.all().count()
|
||||||
elif view == "person":
|
elif view == "person":
|
||||||
if request.GET.has_key("search"):
|
if request.user.is_authenticated():
|
||||||
search = request.GET.get("search")
|
if request.GET.has_key("search"):
|
||||||
if request.user.is_authenticated():
|
search = request.GET.get("search")
|
||||||
if "," in search:
|
if "," in search:
|
||||||
surname, first_name = [term.strip() for term in
|
surname, first_name = [term.strip() for term in
|
||||||
search.split(",", 1)]
|
search.split(",", 1)]
|
||||||
@ -417,7 +445,11 @@ def view(request, view):
|
|||||||
) \
|
) \
|
||||||
.order_by("surname", "first_name")
|
.order_by("surname", "first_name")
|
||||||
else:
|
else:
|
||||||
# BEGIN NON-AUTHENTICATED users
|
object_list = Name.objects.all().order_by("surname", "first_name")
|
||||||
|
else:
|
||||||
|
# BEGIN NON-AUTHENTICATED users
|
||||||
|
if request.GET.has_key("search"):
|
||||||
|
search = request.GET.get("search")
|
||||||
if "," in search:
|
if "," in search:
|
||||||
search, trash = [term.strip() for term in search.split(",", 1)]
|
search, trash = [term.strip() for term in search.split(",", 1)]
|
||||||
object_list = Name.objects \
|
object_list = Name.objects \
|
||||||
@ -426,15 +458,12 @@ def view(request, view):
|
|||||||
Q(person__private=False)
|
Q(person__private=False)
|
||||||
) \
|
) \
|
||||||
.order_by("surname", "first_name")
|
.order_by("surname", "first_name")
|
||||||
# END NON-AUTHENTICATED users
|
|
||||||
else:
|
|
||||||
if request.user.is_authenticated():
|
|
||||||
object_list = Name.objects.all().order_by("surname", "first_name")
|
|
||||||
else:
|
else:
|
||||||
# BEGIN NON-AUTHENTICATED users
|
object_list = Name.objects \
|
||||||
object_list = Name.objects.filter(Q(private=False) &
|
.filter(Q(private=False) &
|
||||||
Q(person__private=False)).order_by("surname", "first_name")
|
Q(person__private=False)) \
|
||||||
# END NON-AUTHENTICATED users
|
.order_by("surname", "first_name")
|
||||||
|
# END NON-AUTHENTICATED users
|
||||||
view_template = 'view_people.html'
|
view_template = 'view_people.html'
|
||||||
total = Name.objects.all().count()
|
total = Name.objects.all().count()
|
||||||
elif view == "place":
|
elif view == "place":
|
||||||
|
@ -67,6 +67,8 @@ urlpatterns += patterns('',
|
|||||||
(r'^(?P<view>(\w+))/$', view),
|
(r'^(?P<view>(\w+))/$', view),
|
||||||
url(r'^person/(?P<handle>(\w+))/$', view_detail,
|
url(r'^person/(?P<handle>(\w+))/$', view_detail,
|
||||||
{"view": "person"}, name="view-person-detail"),
|
{"view": "person"}, name="view-person-detail"),
|
||||||
|
url(r'^person/(?P<handle>(\w+))/(?P<action>(\w+))$', view_detail,
|
||||||
|
{"view": "person"}, name="view-person-detail"),
|
||||||
(r'^(?P<view>(\w+))/(?P<handle>(\w+))/$', view_detail),
|
(r'^(?P<view>(\w+))/(?P<handle>(\w+))/$', view_detail),
|
||||||
(r'^person/(?P<handle>(\w+))/name/(?P<order>(\w+))$', view_name_detail),
|
(r'^person/(?P<handle>(\w+))/name/(?P<order>(\w+))$', view_name_detail),
|
||||||
(r'^person/(?P<handle>(\w+))/name/(?P<order>(\w+))/(?P<action>(\w+))$', view_name_detail),
|
(r'^person/(?P<handle>(\w+))/name/(?P<order>(\w+))/(?P<action>(\w+))$', view_name_detail),
|
||||||
|
274
src/web/utils.py
274
src/web/utils.py
@ -62,17 +62,28 @@ from gen.utils import get_birth_or_fallback, get_death_or_fallback
|
|||||||
from gen.plug import BasePluginManager
|
from gen.plug import BasePluginManager
|
||||||
from cli.grampscli import CLIManager
|
from cli.grampscli import CLIManager
|
||||||
|
|
||||||
util_filters = ['person_event_table', 'person_name_table',
|
util_filters = [
|
||||||
'person_attribute_table',
|
'nbsp',
|
||||||
'person_address_table', 'person_note_table',
|
'render',
|
||||||
'person_gallery_table', 'person_internet_table',
|
]
|
||||||
'person_association_table', 'person_lds_table',
|
|
||||||
'person_reference_table',
|
util_tags = [
|
||||||
'family_children_table', 'family_event_table',
|
"get_person_from_handle",
|
||||||
'family_attribute_table',
|
"event_table",
|
||||||
'family_note_table', 'family_gallery_table',
|
"name_table",
|
||||||
'family_lds_table',
|
"source_table",
|
||||||
'nbsp', 'render']
|
"note_table",
|
||||||
|
"attribute_table",
|
||||||
|
"address_table",
|
||||||
|
"gallery_table",
|
||||||
|
"internet_table",
|
||||||
|
"association_table",
|
||||||
|
"lds_table",
|
||||||
|
"reference_table",
|
||||||
|
"children_table",
|
||||||
|
"make_button",
|
||||||
|
]
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Module Constants
|
# Module Constants
|
||||||
@ -89,6 +100,14 @@ def register_plugins():
|
|||||||
pmgr = BasePluginManager.get_instance()
|
pmgr = BasePluginManager.get_instance()
|
||||||
return pmgr
|
return pmgr
|
||||||
|
|
||||||
|
def get_person_from_handle(db, handle):
|
||||||
|
# db is a Gramps Db interface
|
||||||
|
# handle is a Person Handle
|
||||||
|
try:
|
||||||
|
return db.get_person_from_handle(handle)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
|
|
||||||
def probably_alive(handle):
|
def probably_alive(handle):
|
||||||
db = DjangoDb()
|
db = DjangoDb()
|
||||||
person = db.get_person_from_handle(handle)
|
person = db.get_person_from_handle(handle)
|
||||||
@ -160,10 +179,11 @@ def render(formfield, action):
|
|||||||
retval = formfield.as_widget()
|
retval = formfield.as_widget()
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def make_button(text, url):
|
def make_button(text, url, *args):
|
||||||
return """[<a href="%s">%s</a>]""" % (url, text)
|
url = url % args
|
||||||
|
return """[ <a href="%s">%s</a> ] """ % (url, text)
|
||||||
|
|
||||||
def person_event_table(djperson, user):
|
def event_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Description"),
|
table.columns(_("Description"),
|
||||||
@ -173,9 +193,9 @@ def person_event_table(djperson, user):
|
|||||||
_("Place"),
|
_("Place"),
|
||||||
_("Role"))
|
_("Role"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
obj_type = ContentType.objects.get_for_model(djperson)
|
obj_type = ContentType.objects.get_for_model(obj)
|
||||||
event_ref_list = models.EventRef.objects.filter(
|
event_ref_list = models.EventRef.objects.filter(
|
||||||
object_id=djperson.id,
|
object_id=obj.id,
|
||||||
object_type=obj_type).order_by("order")
|
object_type=obj_type).order_by("order")
|
||||||
event_list = [(obj.ref_object, obj) for obj in event_ref_list]
|
event_list = [(obj.ref_object, obj) for obj in event_ref_list]
|
||||||
for (djevent, event_ref) in event_list:
|
for (djevent, event_ref) in event_list:
|
||||||
@ -187,12 +207,13 @@ def person_event_table(djperson, user):
|
|||||||
get_title(djevent.place),
|
get_title(djevent.place),
|
||||||
str(event_ref.role_type))
|
str(event_ref.role_type))
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add event"), "/person/%s/event/add" % djperson.handle)
|
retval += make_button(_("Add event"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_name_table(djperson, user):
|
def name_table(obj, user, action, url=None, *args):
|
||||||
print "person_name_table", djperson, user
|
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Name"),
|
table.columns(_("Name"),
|
||||||
@ -202,7 +223,7 @@ def person_name_table(djperson, user):
|
|||||||
_("Note Preview"))
|
_("Note Preview"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
links = []
|
links = []
|
||||||
for name in djperson.name_set.all().order_by("order"):
|
for name in obj.name_set.all().order_by("order"):
|
||||||
obj_type = ContentType.objects.get_for_model(name)
|
obj_type = ContentType.objects.get_for_model(name)
|
||||||
sourceq = dji.SourceRef.filter(object_type=obj_type,
|
sourceq = dji.SourceRef.filter(object_type=obj_type,
|
||||||
object_id=name.id).count() > 0
|
object_id=name.id).count() > 0
|
||||||
@ -219,12 +240,15 @@ def person_name_table(djperson, user):
|
|||||||
name.group_as,
|
name.group_as,
|
||||||
["No", "Yes"][sourceq],
|
["No", "Yes"][sourceq],
|
||||||
note)
|
note)
|
||||||
links.append(('URL', "/person/%s/name/%s" %
|
links.append(('URL',
|
||||||
(name.person.handle, name.order)))
|
# url is "/person/%s/name"
|
||||||
|
(url % name.person.handle) + ("/%s" % name.order)))
|
||||||
table.links(links)
|
table.links(links)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add name"), "/person/%s/name/add" % djperson.handle)
|
retval += make_button(_("Add name"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def source_table(obj, user, action, url=None, *args):
|
def source_table(obj, user, action, url=None, *args):
|
||||||
@ -247,28 +271,56 @@ def source_table(obj, user, action, url=None, *args):
|
|||||||
)
|
)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated() and url and action != "edit":
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add source"), url % args)
|
retval += make_button(_("Add source"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_attribute_table(djperson, user):
|
def note_table(obj, user, action, url=None, *args):
|
||||||
|
retval = ""
|
||||||
|
table = Table()
|
||||||
|
table.columns(
|
||||||
|
_("ID"),
|
||||||
|
_("Type"),
|
||||||
|
_("Note"))
|
||||||
|
if user.is_authenticated():
|
||||||
|
obj_type = ContentType.objects.get_for_model(obj)
|
||||||
|
note_refs = dji.NoteRef.filter(object_type=obj_type,
|
||||||
|
object_id=obj.id)
|
||||||
|
for note_ref in note_refs:
|
||||||
|
note = table.db.get_note_from_handle(
|
||||||
|
note_ref.ref_object.handle)
|
||||||
|
table.row(table.db.get_note_from_handle(note.handle),
|
||||||
|
str(note_ref.ref_object.note_type),
|
||||||
|
note_ref.ref_object.text[:50])
|
||||||
|
retval += table.get_html()
|
||||||
|
if user.is_authenticated() and url and action != "edit":
|
||||||
|
retval += make_button(_("Add note"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
|
return retval
|
||||||
|
|
||||||
|
def attribute_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Type"),
|
table.columns(_("Type"),
|
||||||
_("Value"),
|
_("Value"),
|
||||||
)
|
)
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
obj_type = ContentType.objects.get_for_model(djperson)
|
obj_type = ContentType.objects.get_for_model(obj)
|
||||||
attributes = dji.Attribute.filter(object_type=obj_type,
|
attributes = dji.Attribute.filter(object_type=obj_type,
|
||||||
object_id=djperson.id)
|
object_id=obj.id)
|
||||||
for attribute in attributes:
|
for attribute in attributes:
|
||||||
table.row(attribute.attribute_type.name,
|
table.row(attribute.attribute_type.name,
|
||||||
attribute.value)
|
attribute.value)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add attribute"), "/person/%s/attribute/add" % djperson.handle)
|
retval += make_button(_("Add attribute"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_address_table(djperson, user):
|
def address_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Date"),
|
table.columns(_("Date"),
|
||||||
@ -277,7 +329,7 @@ def person_address_table(djperson, user):
|
|||||||
_("State"),
|
_("State"),
|
||||||
_("Country"))
|
_("Country"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
for address in djperson.address_set.all().order_by("order"):
|
for address in obj.address_set.all().order_by("order"):
|
||||||
locations = address.location_set.all().order_by("order")
|
locations = address.location_set.all().order_by("order")
|
||||||
for location in locations:
|
for location in locations:
|
||||||
table.row(display_date(address),
|
table.row(display_date(address),
|
||||||
@ -286,77 +338,63 @@ def person_address_table(djperson, user):
|
|||||||
location.state,
|
location.state,
|
||||||
location.country)
|
location.country)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add address"), "/person/%s/address/add" % djperson.handle)
|
retval += make_button(_("Add address"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_note_table(djperson, user):
|
def gallery_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("ID"),
|
|
||||||
_("Type"),
|
|
||||||
_("Note"))
|
|
||||||
if user.is_authenticated():
|
|
||||||
obj_type = ContentType.objects.get_for_model(djperson)
|
|
||||||
note_refs = dji.NoteRef.filter(object_type=obj_type,
|
|
||||||
object_id=djperson.id)
|
|
||||||
for note_ref in note_refs:
|
|
||||||
note = table.db.get_note_from_handle(
|
|
||||||
note_ref.ref_object.handle)
|
|
||||||
table.row(table.db.get_note_from_handle(note.handle),
|
|
||||||
str(note_ref.ref_object.note_type),
|
|
||||||
note_ref.ref_object.text[:50])
|
|
||||||
retval += table.get_html()
|
|
||||||
if user.is_authenticated():
|
|
||||||
retval += make_button(_("Add note"), "/person/%s/note/add" % djperson.handle)
|
|
||||||
return retval
|
|
||||||
|
|
||||||
def person_gallery_table(djperson, user):
|
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Name"),
|
table.columns(_("Name"),
|
||||||
_("Type"),
|
_("Type"),
|
||||||
)
|
)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add gallery"), "/person/%s/gallery/add" % djperson.handle)
|
retval += make_button(_("Add gallery"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_internet_table(djperson, user):
|
def internet_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Type"),
|
table.columns(_("Type"),
|
||||||
_("Path"),
|
_("Path"),
|
||||||
_("Description"))
|
_("Description"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
urls = dji.Url.filter(person=djperson)
|
urls = dji.Url.filter(person=obj)
|
||||||
for url in urls:
|
for url in urls:
|
||||||
table.row(str(url.url_type),
|
table.row(str(url.url_type),
|
||||||
url.path,
|
url.path,
|
||||||
url.desc)
|
url.desc)
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add internet"), "/person/%s/internet/add" % djperson.handle)
|
retval += make_button(_("Add internet"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_association_table(djperson, user):
|
def association_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Name"),
|
table.columns(_("Name"),
|
||||||
_("ID"),
|
_("ID"),
|
||||||
_("Association"))
|
_("Association"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
gperson = table.db.get_person_from_handle(djperson.handle)
|
gperson = table.db.get_person_from_handle(obj.handle)
|
||||||
associations = gperson.get_person_ref_list()
|
associations = gperson.get_person_ref_list()
|
||||||
for association in associations:
|
for association in associations:
|
||||||
table.row()
|
table.row()
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add association"), "/person/%s/association/add" % djperson.handle)
|
retval += make_button(_("Add association"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_lds_table(djperson, user):
|
def lds_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Type"),
|
table.columns(_("Type"),
|
||||||
@ -365,8 +403,8 @@ def person_lds_table(djperson, user):
|
|||||||
_("Temple"),
|
_("Temple"),
|
||||||
_("Place"))
|
_("Place"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
obj_type = ContentType.objects.get_for_model(djperson)
|
obj_type = ContentType.objects.get_for_model(obj)
|
||||||
ldss = djperson.lds_set.all().order_by("order")
|
ldss = obj.lds_set.all().order_by("order")
|
||||||
for lds in ldss:
|
for lds in ldss:
|
||||||
table.row(str(lds.lds_type),
|
table.row(str(lds.lds_type),
|
||||||
display_date(lds),
|
display_date(lds),
|
||||||
@ -374,25 +412,29 @@ def person_lds_table(djperson, user):
|
|||||||
lds.temple,
|
lds.temple,
|
||||||
get_title(lds.place))
|
get_title(lds.place))
|
||||||
retval += table.get_html()
|
retval += table.get_html()
|
||||||
if user.is_authenticated():
|
if user.is_authenticated() and url and action != "edit":
|
||||||
retval += make_button(_("Add LDS"), "/person/%s/lds/add" % djperson.handle)
|
retval += make_button(_("Add LDS"), (url + "/add") % args)
|
||||||
|
else:
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def person_reference_table(djperson, user):
|
def reference_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(_("Type"),
|
table.columns(_("Type"),
|
||||||
_("ID"),
|
_("ID"),
|
||||||
_("Name"))
|
_("Name"))
|
||||||
if user.is_authenticated():
|
if user.is_authenticated():
|
||||||
references = dji.PersonRef.filter(ref_object=djperson)
|
references = dji.PersonRef.filter(ref_object=obj)
|
||||||
for reference in references:
|
for reference in references:
|
||||||
table.row(str(reference.ref_object),
|
table.row(str(reference.ref_object),
|
||||||
reference.ref_object.gramps_id,
|
reference.ref_object.gramps_id,
|
||||||
make_name(reference.ref_object.name_set, user))
|
make_name(reference.ref_object.name_set, user))
|
||||||
return table.get_html()
|
retval += table.get_html()
|
||||||
|
retval += nbsp("") # to keep tabs same height
|
||||||
|
return retval
|
||||||
|
|
||||||
def family_children_table(djfamily, user):
|
def children_table(obj, user, action, url=None, *args):
|
||||||
retval = ""
|
retval = ""
|
||||||
table = Table()
|
table = Table()
|
||||||
table.columns(
|
table.columns(
|
||||||
@ -407,74 +449,7 @@ def family_children_table(djfamily, user):
|
|||||||
#if user.is_authenticated():
|
#if user.is_authenticated():
|
||||||
#for djfamily:
|
#for djfamily:
|
||||||
# table.row("test")
|
# table.row("test")
|
||||||
return table.get_html()
|
retval += nbsp("") # to keep tabs same height
|
||||||
|
|
||||||
def family_event_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("Description"),
|
|
||||||
_("Type"),
|
|
||||||
_("ID"),
|
|
||||||
_("Date"),
|
|
||||||
_("Place"),
|
|
||||||
_("Role"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
|
||||||
|
|
||||||
def family_source_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("ID"),
|
|
||||||
_("Type"),
|
|
||||||
_("Author"),
|
|
||||||
_("Page"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
|
||||||
|
|
||||||
def family_attribute_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("Type"),
|
|
||||||
_("Value"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
|
||||||
|
|
||||||
def family_note_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("Type"),
|
|
||||||
_("Preview"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
|
||||||
|
|
||||||
def family_gallery_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("Column"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
|
||||||
|
|
||||||
def family_lds_table(djfamily, user):
|
|
||||||
retval = ""
|
|
||||||
table = Table()
|
|
||||||
table.columns(
|
|
||||||
_("Type"),
|
|
||||||
_("Date"),
|
|
||||||
_("Status"),
|
|
||||||
_("Temple"),
|
|
||||||
_("Place"),
|
|
||||||
)
|
|
||||||
table.row("test")
|
|
||||||
return table.get_html()
|
return table.get_html()
|
||||||
|
|
||||||
## FIXME: these dji function wrappers just use the functions
|
## FIXME: these dji function wrappers just use the functions
|
||||||
@ -488,14 +463,14 @@ def get_title(place):
|
|||||||
|
|
||||||
def person_get_birth_date(person):
|
def person_get_birth_date(person):
|
||||||
db = DjangoDb()
|
db = DjangoDb()
|
||||||
event = get_birth_or_fallback(db, person)
|
event = get_birth_or_fallback(db, db.get_person_from_handle(person.handle))
|
||||||
if event:
|
if event:
|
||||||
return event.date
|
return event.date
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def person_get_death_date(person):
|
def person_get_death_date(person):
|
||||||
db = DjangoDb()
|
db = DjangoDb()
|
||||||
event = get_death_or_fallback(db, person)
|
event = get_death_or_fallback(db, db.get_person_from_handle(person.handle))
|
||||||
if event:
|
if event:
|
||||||
return event.date
|
return event.date
|
||||||
return None
|
return None
|
||||||
@ -530,7 +505,7 @@ def person_get_event(person, event_type=None):
|
|||||||
for event_handle in event_ref_list]
|
for event_handle in event_ref_list]
|
||||||
return [j for i in retval for j in i]
|
return [j for i in retval for j in i]
|
||||||
|
|
||||||
def make_name(name, user=None):
|
def make_name(name, user):
|
||||||
if isinstance(name, models.Name):
|
if isinstance(name, models.Name):
|
||||||
surname = name.surname.strip()
|
surname = name.surname.strip()
|
||||||
if not surname:
|
if not surname:
|
||||||
@ -560,6 +535,9 @@ def make_name(name, user=None):
|
|||||||
return "[No preferred name]"
|
return "[No preferred name]"
|
||||||
else:
|
else:
|
||||||
return "%s, %s" % (name.get_surname(), name.get_first_name())
|
return "%s, %s" % (name.get_surname(), name.get_first_name())
|
||||||
|
elif isinstance(name, models.Person): # django person
|
||||||
|
person = name
|
||||||
|
return make_name(person.name_set.get(preferred=True), user)
|
||||||
else: # no name
|
else: # no name
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user