link to image page from image grid; hide concepts from 'related' portlet if marked as hidden

This commit is contained in:
Helmut Merz 2011-12-27 12:02:27 +01:00
parent 59f2a66ef6
commit 6d0a589015
3 changed files with 31 additions and 6 deletions

View file

@ -83,7 +83,7 @@
style cell/style">
<metal:image use-macro="item/macros/image" />
<div class="legend">
<b tal:content="cell/title" />
<a tal:attributes="href cell/targetUrl"><b tal:content="cell/title" /></a>
<span tal:condition="cell/img/showInfo|nothing">
<a tal:define="url string:${cell/img/url}/meta_info.html"
tal:attributes="href url;

View file

@ -38,6 +38,7 @@ from zope.traversing.api import getName, getParent
from zope.traversing.browser import absoluteURL
from cybertools.browser.action import actions
from cybertools.meta.interfaces import IOptions
from cybertools.typology.interfaces import IType
from cybertools.xedit.browser import ExternalEditorView, fromUnicode
from loops.browser.action import DialogAction, TargetAction
@ -51,6 +52,7 @@ from loops.interfaces import IMediaAsset as legacy_IMediaAsset
from loops.interfaces import ITypeConcept
from loops.media.interfaces import IMediaAsset
from loops.organize.stateful.browser import statefulActions
from loops.organize.util import getRolesForPrincipal
from loops.versioning.browser import version_macros
from loops.versioning.interfaces import IVersionable
from loops import util
@ -270,15 +272,38 @@ class ResourceView(BaseView):
# relations
def concepts(self):
for r in self.context.getConceptRelations():
yield ConceptRelationView(r, self.request)
def isHidden(self, pr):
hideRoles = None
options = component.queryAdapter(adapted(pr.first), IOptions)
if options is not None:
hideRoles = options('hide_for', None)
if not hideRoles:
hideRoles = IOptions(adapted(pr.first.conceptType))('hide_for', None)
if hideRoles is not None:
principal = self.request.principal
if (IUnauthenticatedPrincipal.providedBy(principal) and
'zope.Anonymous' in hideRoles):
return True
roles = getRolesForPrincipal(principal.id, self.context)
for r in roles:
if r in hideRoles:
return True
return False
#@Lazy
def conceptsForPortlet(self):
return [p for p in self.relatedConcepts() if not self.isHidden(p.relation)]
def relatedConcepts(self):
for c in self.concepts():
if c.isProtected: continue
if c.isProtected:
continue
yield c
def concepts(self):
for r in self.context.getConceptRelations():
yield ConceptRelationView(r, self.request)
def clients(self):
for node in self.context.getClients():
yield NodeView(node, self.request)

View file

@ -114,7 +114,7 @@
<metal:actions define-macro="related">
<div tal:repeat="concept macro/info/relatedConcepts">
<div tal:repeat="concept macro/info/conceptsForPortlet">
<a tal:attributes="href python: view.getUrlForTarget(concept);
title concept/relationInfo">
<span i18n:translate="" tal:content="concept/title">Concept</span>