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:
helmutm 2008-04-27 09:58:33 +00:00
parent 24bc699e53
commit 54d238afe9
6 changed files with 51 additions and 12 deletions

View file

@ -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

View file

@ -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):

View file

@ -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)

View file

@ -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()

View file

@ -41,9 +41,6 @@ class StatefulLoopsObject(Stateful, StatefulAdapter):
adapts(ILoopsObject) adapts(ILoopsObject)
def getAvailableTransitionsForUser(self):
return self.getAvailableTransitions()
class SimplePublishable(StatefulLoopsObject): class SimplePublishable(StatefulLoopsObject):

View file

@ -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: