control available states definitions by loops options
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2558 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
24bc699e53
commit
54d238afe9
6 changed files with 51 additions and 12 deletions
|
@ -49,13 +49,14 @@ from zope.traversing.api import getName, getParent
|
||||||
|
|
||||||
from cybertools.ajax.dojo import dojoMacroTemplate
|
from cybertools.ajax.dojo import dojoMacroTemplate
|
||||||
from cybertools.browser.view import GenericView
|
from cybertools.browser.view import GenericView
|
||||||
|
from cybertools.meta.interfaces import IOptions
|
||||||
from cybertools.relation.interfaces import IRelationRegistry
|
from cybertools.relation.interfaces import IRelationRegistry
|
||||||
from cybertools.stateful.interfaces import IStateful
|
from cybertools.stateful.interfaces import IStateful
|
||||||
from cybertools.text import mimetypes
|
from cybertools.text import mimetypes
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
from loops.common import adapted
|
from loops.common import adapted
|
||||||
from loops.i18n.browser import I18NView
|
from loops.i18n.browser import I18NView
|
||||||
from loops.interfaces import IView, INode
|
from loops.interfaces import IResource, IView, INode
|
||||||
from loops.resource import Resource
|
from loops.resource import Resource
|
||||||
from loops.security.common import canAccessObject, canListObject, canWriteObject
|
from loops.security.common import canAccessObject, canListObject, canWriteObject
|
||||||
from loops.type import ITypeConcept
|
from loops.type import ITypeConcept
|
||||||
|
@ -320,6 +321,16 @@ class BaseView(GenericView, I18NView):
|
||||||
return util.KeywordVocabulary(general
|
return util.KeywordVocabulary(general
|
||||||
+ self.listTypesForSearch(('resource',), ('system', 'hidden'),))
|
+ self.listTypesForSearch(('resource',), ('system', 'hidden'),))
|
||||||
|
|
||||||
|
# options/settings
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def options(self):
|
||||||
|
return IOptions(self.context)
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def globalOptions(self):
|
||||||
|
return IOptions(self.loopsRoot)
|
||||||
|
|
||||||
# versioning
|
# versioning
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
@ -379,10 +390,13 @@ class BaseView(GenericView, I18NView):
|
||||||
if not checkPermission('loops.ManageSite', self.context):
|
if not checkPermission('loops.ManageSite', self.context):
|
||||||
# TODO: replace by more sensible permission
|
# TODO: replace by more sensible permission
|
||||||
return result
|
return result
|
||||||
target = self.virtualTargetObject
|
#statesDefs = ['loops.classification_quality', 'loops.simple_publishing']
|
||||||
for std in ['loops.classification_quality',
|
if IResource.providedBy(self.target):
|
||||||
'loops.simple_publishing']:
|
statesDefs = self.globalOptions('organize.stateful.resource', ())
|
||||||
stf = component.getAdapter(target, IStateful, name=std)
|
else:
|
||||||
|
statesDefs = ()
|
||||||
|
for std in statesDefs:
|
||||||
|
stf = component.getAdapter(self.target, IStateful, name=std)
|
||||||
result.append(stf)
|
result.append(stf)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,14 @@ from zope.lifecycleevent import Attributes
|
||||||
from zope.formlib.form import Form, FormFields
|
from zope.formlib.form import Form, FormFields
|
||||||
from zope.formlib.namedtemplate import NamedTemplate
|
from zope.formlib.namedtemplate import NamedTemplate
|
||||||
from zope.proxy import removeAllProxies
|
from zope.proxy import removeAllProxies
|
||||||
from zope.security import canAccess, canWrite
|
from zope.security import canAccess, canWrite, checkPermission
|
||||||
from zope.security.proxy import removeSecurityProxy
|
from zope.security.proxy import removeSecurityProxy
|
||||||
|
|
||||||
from cybertools.ajax import innerHtml
|
from cybertools.ajax import innerHtml
|
||||||
from cybertools.browser import configurator
|
from cybertools.browser import configurator
|
||||||
from cybertools.browser.action import Action
|
from cybertools.browser.action import Action
|
||||||
from cybertools.browser.view import GenericView
|
from cybertools.browser.view import GenericView
|
||||||
|
from cybertools.stateful.interfaces import IStateful
|
||||||
from cybertools.typology.interfaces import IType, ITypeManager
|
from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
from cybertools.xedit.browser import ExternalEditorView
|
from cybertools.xedit.browser import ExternalEditorView
|
||||||
from loops.browser.action import DialogAction
|
from loops.browser.action import DialogAction
|
||||||
|
@ -296,6 +297,8 @@ class NodeView(BaseView):
|
||||||
target = getVersion(target, self.request)
|
target = getVersion(target, self.request)
|
||||||
return target
|
return target
|
||||||
|
|
||||||
|
target = virtualTargetObject
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def targetUid(self):
|
def targetUid(self):
|
||||||
if self.virtualTargetObject:
|
if self.virtualTargetObject:
|
||||||
|
@ -372,6 +375,25 @@ class NodeView(BaseView):
|
||||||
if target is not None:
|
if target is not None:
|
||||||
return BaseView(target, self.request).url
|
return BaseView(target, self.request).url
|
||||||
|
|
||||||
|
# states information
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def xxx_states(self):
|
||||||
|
result = []
|
||||||
|
if not checkPermission('loops.ManageSite', self.context):
|
||||||
|
# TODO: replace by more sensible permission
|
||||||
|
return result
|
||||||
|
target = self.virtualTargetObject
|
||||||
|
#statesDefs = ['loops.classification_quality', 'loops.simple_publishing']
|
||||||
|
if IResource.providedBy(target):
|
||||||
|
statesDefs = self.globalOptions('organize.stateful.resource', ())
|
||||||
|
else:
|
||||||
|
statesDefs = ()
|
||||||
|
for std in statesDefs:
|
||||||
|
stf = component.getAdapter(target, IStateful, name=std)
|
||||||
|
result.append(stf)
|
||||||
|
return result
|
||||||
|
|
||||||
# target viewing and editing support
|
# target viewing and editing support
|
||||||
|
|
||||||
def getUrlForTarget(self, target):
|
def getUrlForTarget(self, target):
|
||||||
|
|
|
@ -185,7 +185,8 @@ class ResourceView(BaseView):
|
||||||
|
|
||||||
def getObjectActions(self, page=None, target=None):
|
def getObjectActions(self, page=None, target=None):
|
||||||
acts = ['info']
|
acts = ['info']
|
||||||
acts.extend('state.' + st for st in statefulActions)
|
#acts.extend('state.' + st for st in statefulActions)
|
||||||
|
acts.extend('state.' + st.statesDefinition for st in self.states)
|
||||||
if self.xeditable:
|
if self.xeditable:
|
||||||
acts.append('external_edit')
|
acts.append('external_edit')
|
||||||
return actions.get('object', acts, view=self, page=page, target=target)
|
return actions.get('object', acts, view=self, page=page, target=target)
|
||||||
|
|
|
@ -137,6 +137,9 @@ We first need a node that provides us access to the resource as its target
|
||||||
|
|
||||||
The form view gives us access to the states of the object.
|
The form view gives us access to the states of the object.
|
||||||
|
|
||||||
|
>>> loopsRoot.options = ['organize.stateful.resource:'
|
||||||
|
... 'loops.classification_quality,loops.simple_publishing']
|
||||||
|
|
||||||
>>> form = EditObjectForm(node, TestRequest())
|
>>> form = EditObjectForm(node, TestRequest())
|
||||||
>>> for st in form.states:
|
>>> for st in form.states:
|
||||||
... sto = st.getStateObject()
|
... sto = st.getStateObject()
|
||||||
|
|
|
@ -41,9 +41,6 @@ class StatefulLoopsObject(Stateful, StatefulAdapter):
|
||||||
|
|
||||||
adapts(ILoopsObject)
|
adapts(ILoopsObject)
|
||||||
|
|
||||||
def getAvailableTransitionsForUser(self):
|
|
||||||
return self.getAvailableTransitions()
|
|
||||||
|
|
||||||
|
|
||||||
class SimplePublishable(StatefulLoopsObject):
|
class SimplePublishable(StatefulLoopsObject):
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,8 @@ from cybertools.stateful.interfaces import IStateful
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
|
|
||||||
|
|
||||||
statefulActions = ('loops.classification_quality',)
|
statefulActions = ('loops.classification_quality',
|
||||||
|
'loops.simple_publishing',)
|
||||||
|
|
||||||
|
|
||||||
class StateAction(Action):
|
class StateAction(Action):
|
||||||
|
@ -54,7 +55,8 @@ class StateAction(Action):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def icon(self):
|
def icon(self):
|
||||||
return 'cybertools.icons/led%s.png' % self.stateObject.color
|
icon = self.stateObject.icon or 'led%s.png' % self.stateObject.color
|
||||||
|
return 'cybertools.icons/' + icon
|
||||||
|
|
||||||
|
|
||||||
for std in statefulActions:
|
for std in statefulActions:
|
||||||
|
|
Loading…
Add table
Reference in a new issue