--- /dev/null
+# -*- coding: utf-8 -*-
+# (c) 2003 Centre de Recherche en Informatique ENSMP Fontainebleau <http://cri.ensmp.fr>
+# (c) 2003 BenoƮt PIN <mailto:pin@cri.ensmp.fr>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as published
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+#
+
+from Globals import InitializeClass, DTMLFile
+from Products.CMFCore.utils import getToolByName
+
+from AccessControl import ClassSecurityInfo
+from Products.CMFCore.permissions import View, ModifyPortalContent
+from Products.CMFCore.DynamicType import DynamicType
+from Products.PageTemplates.Expressions import getEngine
+from Products.PageTemplates.Expressions import SecureModuleImporter
+
+class BaseSlot(DynamicType) :
+ """Slot"""
+
+ _isMosaicSlot = 1
+ _editableFields = []
+ _indexableFields = []
+
+ security = ClassSecurityInfo()
+
+ security.declarePublic('callAction')
+ def callAction(self, actionId, *args, **kw) :
+ """call action from action definitions"""
+ typeTool = getToolByName(self, 'portal_types')
+
+ # !!! id et meta_type doivent etre identiques dans la fti.
+ typeInfo = typeTool.getTypeInfo(self)
+ actionInfo = typeInfo.getActionInfo('object/%s' % actionId)
+ zpt = getattr(self, actionInfo['url'])
+ return zpt(object=self, block=self.aq_parent, *args, **kw)
+
+ security.declareProtected(ModifyPortalContent, 'edit')
+ def edit(self, **kw) :
+ """ Edit Slot"""
+ for fieldName in self._editableFields :
+ if kw.has_key(fieldName) :
+ setattr(self, fieldName, kw[fieldName])
+
+ security.declareProtected(View, 'getBlock')
+ def getBlock(self) :
+ """ Return the block object where the slot is located """
+ return self.aq_parent
+
+ security.declareProtected(View, 'getExprContext')
+ def getExprContext(self, REQUEST=None) :
+ """Return an expression context customized for expressions properties from slot information"""
+ block = self.aq_parent
+ while block.meta_type != 'Mosaic Block' :
+ block = block.aq_parent
+ data = {
+ 'portal' : self.portal_url.getPortalObject(),
+ 'slot' : self,
+ 'block' : self.aq_parent,
+ 'here' : None,
+ 'request' : REQUEST,
+ 'modules' : SecureModuleImporter,
+ 'nothing' : None,
+ }
+ return getEngine().getContext(data)
+
+ security.declareProtected(View, 'SearchableText')
+ def SearchableText(self) :
+ """ Return full text for indexation """
+ text = ''
+ for fieldName in self._indexableFields :
+ field = getattr(self, fieldName)
+ if callable(field) :
+ text += ' %s' % field()
+ else :
+ text += ' %s' % field
+
+ return text
+
+ def _initDefaultValues(self) :
+ pass
+
+ def indexObject(self): pass
+ def unindexObject(self): pass
+ def reindexObject(self, idxs=[]): pass
+ def reindexObjectSecurity(self): pass
+ def notifyWorkflowCreated(self): pass
+
+
+InitializeClass(BaseSlot)