1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
"""Special folder which notifies portal_skins about every change
"""
__author__ = 'Christian Heimes'
from urllib import quote
from Globals import InitializeClass
from OFS.Folder import Folder
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.CMFCore import CMFCorePermissions
from Products.CMFCore.utils import getToolByName
from AccessControl import ClassSecurityInfo
def manage_addSkinsCustomFolder (self, id, title = '', REQUEST = None):
""" Add a new skin custom folder """
ob = SkinsCustomFolder(id, title, REQUEST)
self._setObject(id, ob)
if REQUEST:
try: u = self.DestinationURL()
except: u = REQUEST['URL1']
REQUEST.RESPONSE.redirect(u + '/manage_main')
manage_addSkinsCustomFolderForm = PageTemplateFile('www/addSkinsCustomFolder', globals())
class SkinsCustomFolder(Folder):
""" skin custom folder """
meta_type='Skin Custom Folder'
security = ClassSecurityInfo()
icon = 'misc_/SpeedPack/SkinCustomFolder_icon.gif'
def __init__(self, id, title='',REQUEST=None):
self.id = id
self.title = title
security.declarePrivate('manage_afterAdd')
def manage_afterAdd(self, item, container):
self.refreshSkinTool()
Folder.manage_afterAdd(self, item, container)
security.declarePrivate('manage_beforeDelete')
def manage_beforeDelete(self, item, container):
self.refreshSkinTool()
Folder.manage_beforeDelete(self, item, container)
security.declarePrivate('manage_afterClone')
def manage_afterClone(self, item):
self.refreshSkinTool()
Folder.manage_afterClone(self, item)
security.declarePrivate('refreshSkinTool')
def refreshSkinTool(self):
stool = getToolByName(self, 'portal_skins')
stool.clearSkinCache()
def __bobo_traverse__(self, REQUEST, name=None):
# hook into traversal and refresh an object
# after an edit (PSOT) or upload (PUT)
method = self.REQUEST.get('REQUEST_METHOD', None)
if method in ('POST', 'PUT'):
self.refreshSkinTool()
return getattr(self, name)
InitializeClass(SkinsCustomFolder)
def register(context, globals):
context.registerClass(meta_type=SkinsCustomFolder.meta_type,
permission=CMFCorePermissions.ManagePortal,
constructors=(manage_addSkinsCustomFolderForm,
manage_addSkinsCustomFolder,),
icon='www/SkinCustomFolder_icon.gif',
)
|