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