File: SkinsCustomFolder.py

package info (click to toggle)
zope-speedpack 0.3-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 156 kB
  • ctags: 66
  • sloc: python: 421; sh: 60; makefile: 38
file content (76 lines) | stat: -rw-r--r-- 2,697 bytes parent folder | download
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',
                         )