Refactor to allow references to be viewed/edited

svn: r20086
This commit is contained in:
Doug Blank 2012-07-26 13:27:49 +00:00
parent 6c4f7b5699
commit bd15d69989
3 changed files with 49 additions and 6 deletions

View File

@ -845,6 +845,14 @@ class BaseRef(models.Model):
#attributes = models.ManyToManyField("Attribute", null=True)
private = models.BooleanField()
def get_url(self):
# /person/3536453463/reference/event/2
ref_by = self.object_type.model_class().objects.get(id=self.object_id)
ref_to = self.get_reference_to()
return "/%s/%s/reference/%s/%s" % (ref_by.__class__.__name__.lower(),
ref_by.handle,
ref_to.__class__.__name__.lower(),
self.order)
class Log(BaseRef):
log_type = models.CharField(max_length=10) # edit, delete, add
reason = models.TextField() # must be filled in
@ -859,6 +867,9 @@ class Log(BaseRef):
class NoteRef(BaseRef):
ref_object = models.ForeignKey('Note')
def get_reference_to(self):
return self.ref_object
def __unicode__(self):
return "NoteRef to " + str(self.ref_object)
@ -869,6 +880,9 @@ class EventRef(BaseRef):
def __unicode__(self):
return str(self.ref_object)
def get_reference_to(self):
return self.ref_object
def get_url(self):
# /person/3536453463/reference/event/2
ref_by = self.object_type.model_class().objects.get(id=self.object_id)
@ -883,6 +897,9 @@ class RepositoryRef(BaseRef):
source_media_type = models.ForeignKey('SourceMediaType')
call_number = models.CharField(max_length=50)
def get_reference_to(self):
return self.ref_object
def __unicode__(self):
return "RepositoryRef to " + str(self.ref_object)
@ -890,6 +907,9 @@ class PersonRef(BaseRef):
ref_object = models.ForeignKey('Person')
description = models.CharField(max_length=50, blank=True, null=True)
def get_reference_to(self):
return self.ref_object
def __unicode__(self):
return "PersonRef to " + str(self.ref_object)
@ -899,6 +919,9 @@ class CitationRef(BaseRef):
def __unicode__(self):
return "CitationRef to " + str(self.citation)
def get_reference_to(self):
return self.citation
class ChildRef(BaseRef):
father_rel_type = models.ForeignKey('ChildRefType',
related_name="child_father_rel")
@ -906,6 +929,13 @@ class ChildRef(BaseRef):
related_name="child_mother_rel")
ref_object = models.ForeignKey('Person')
def get_reference_to(self):
return self.ref_object
def get_url(self):
# FIXME: go to child reference
return "/person/%s" % self.ref_object.handle
def __unicode__(self):
return "ChildRef to " + str(self.ref_object)
@ -916,6 +946,9 @@ class MediaRef(BaseRef):
y2 = models.IntegerField()
ref_object = models.ForeignKey('Media')
def get_reference_to(self):
return self.ref_object
def __unicode__(self):
return "MediaRef to " + str(self.ref_object)

View File

@ -1250,8 +1250,9 @@ def process_reference(request, ref_by, handle, ref_to, order):
context["tviews"] = _('References')
context["object"] = referenced_by
context["handle"] = referenced_by.handle
context["url"] = "/%s/%s" % (referenced_to[0].ref_object.__class__.__name__.lower(),
referenced_to[0].ref_object.handle)
context["url"] = referenced_to[0].get_reference_to().get_url()
#"/%s/%s" % (referenced_to[0].ref_object.__class__.__name__.lower(),
# referenced_to[0].ref_object.handle)
context["referenced_by"] = "/%s/%s" % (referenced_by.__class__.__name__.lower(),
referenced_by.handle)
context["action"] = "view"
@ -1324,6 +1325,9 @@ def process_list_item(request, view, handle, act, item, index):
if item == "eventref":
refs = dji.EventRef.filter(object_id=obj.id,
object_type=obj_type).order_by("order")
elif item == "citationref":
refs = dji.CitationRef.filter(object_id=obj.id,
object_type=obj_type).order_by("order")
# Next, perform action:
if act == "remove":
count = 1

View File

@ -312,6 +312,7 @@ def event_table(obj, user, act, url, args):
object_id=obj.id,
object_type=obj_type).order_by("order")
event_list = [(o.ref_object, o) for o in event_ref_list]
links = []
count = 1
for (djevent, event_ref) in event_list:
table.row(Link("[[x%d]][[^%d]][[v%d]]" % (count, count, count)) if user.is_superuser and act == "view" else "",
@ -321,7 +322,9 @@ def event_table(obj, user, act, url, args):
display_date(djevent),
get_title(djevent.place),
str(event_ref.role_type))
links.append(('URL', event_ref.get_url()))
count += 1
table.links(links)
retval += table.get_html()
if user.is_superuser and act == "view":
count = 1
@ -435,17 +438,20 @@ def citation_table(obj, user, act, url=None, *args):
obj_type = ContentType.objects.get_for_model(obj)
citation_refs = dji.CitationRef.filter(object_type=obj_type,
object_id=obj.id).order_by("order")
links = []
count = 1
for citation_ref in citation_refs:
if citation_ref.citation:
citation = table.db.get_citation_from_handle(
citation_ref.citation.handle)
table.row(Link("[[x%d]][[^%d]][[v%d]]" % (count, count, count)) if user.is_superuser and url and act == "view" else "",
citation,
citation.gramps_id,
str(citation.confidence),
str(citation.page),
)
links.append(('URL', citation_ref.get_url()))
count += 1
table.links(links)
retval += table.get_html()
if user.is_superuser and url and act == "view":
count = 1
@ -895,7 +901,7 @@ def children_table(obj, user, act, url=None, *args):
childref.mother_rel_type,
date_as_text(child.birth, user),
)
links.append(('URL', ("/person/%s" % child.handle)))
links.append(('URL', childref.get_url()))
count += 1
else:
table.row("",
@ -907,8 +913,8 @@ def children_table(obj, user, act, url=None, *args):
"[Private]",
"[Private]",
)
if not child.private:
links.append(('URL', ("/person/%s" % child.handle)))
if not child.private and not childref.private:
links.append(('URL', childref.get_url()))
else:
links.append((None, None))
count += 1