source: products/qSEOptimizer/tags/0.3.2rc1/Extensions/Install.py @ 1

Last change on this file since 1 was 1, checked in by myroslav, 18 years ago

Building directory structure

File size: 5.5 KB
Line 
1import string
2from App.Common import package_home
3from os.path import exists as path_exists, join as path_join
4from cStringIO import StringIO
5from Products.CMFCore.utils import getToolByName
6from Products.CMFCore.DirectoryView import addDirectoryViews
7from Products.qSEOptimizer import qSEO_globals
8from Products.CMFCore.CMFCorePermissions import ManagePortal
9from OFS.ObjectManager import BadRequestException
10
11configlets = ({'id':'qSEOptimizer',
12    'name':'Search Engine Optimizer',
13    'action':'string:${portal_url}/prefs_qseo_setup_form',
14    'condition':'',
15    'category':'Products',
16    'visible':1,
17    'appId':'qSEOptimizer',
18    'permission':ManagePortal,
19    'imageUrl':'search_icon.gif'},)
20
21qSEO_CONTENT = ['File','Document','News Item','BlogEntry']
22qSEO_FOLDER  = []
23qSEO_TYPES   = qSEO_CONTENT + qSEO_FOLDER
24try:
25    True
26except:
27    True = 1
28    False = 0
29
30def setupSkin(self, out, layers):
31    """Setup skins"""
32    skinstool=getToolByName(self, 'portal_skins')
33    addDirectoryViews(skinstool, 'skins', qSEO_globals)
34
35    for skin in skinstool.getSkinSelections():
36        modified = False
37        path = skinstool.getSkinPath(skin)
38        path = map( string.strip, string.split( path,',' ) )
39        for layer in layers:
40            if not layer in path:
41                try:
42                    path.insert(path.index('custom')+1, layer )
43                except ValueError:
44                    path.append(layer)
45                modified = True
46                out.write('  Layer %s sucessfully installed into skin %s.\n' % (layer,skin))
47            else:
48                out.write('  Layer %s was already installed into skin %s.\n' % (layer,skin))
49        if modified:
50            path = string.join( path, ', ' )
51            skinstool.addSkinSelection( skin, path )
52
53def removeSkin(self, layer):
54    """Remove layers"""
55    skinstool = getToolByName(self, 'portal_skins')
56    for skinName in skinstool.getSkinSelections():
57        original_path = skinstool.getSkinPath(skinName)
58        original_path = [l.strip() for l in original_path.split(',')]
59        new_path= []
60        for l in original_path:
61            if (l == layer) or (l.startswith(layer+'/')):
62                continue
63            new_path.append(l)
64        skinstool.addSkinSelection(skinName, ','.join(new_path))
65       
66def setupActions(self, out):
67    # And now update the relevant portal_type actions
68    out.write("Inspecting portal_types\n")
69    tool = getToolByName(self, 'portal_types')
70    for ptype in tool.objectValues():
71        if ptype.getId() in qSEO_TYPES:
72            #add the action for viewing versioning
73            action = ptype.getActionById( 'seo_properties', default=None )
74            if action is None:
75                out.write( '  Added SEO Properties tab for %s\n' % ptype.getId() )
76                ptype.addAction( 'seo_properties'
77                               , 'SEO Properties'
78                               , 'string:${object_url}/qseo_properties_edit_form'
79                               , ''
80                               , 'Modify portal content'
81                               , 'object'
82                               , visible=1
83                               )
84def removeActions(self):
85    # And now update the relevant portal_type actions
86    tool = getToolByName(self, 'portal_types')
87    for ptype in tool.objectValues():
88        if ptype.getId() in qSEO_TYPES:
89            #delet the action for viewing versioning
90            action = ptype.getActionById( 'seo_properties', default=None )
91            if action != None:
92                acts = list(ptype.listActions())
93                ptype.deleteActions([acts.index(a) for a in acts if a.getId()=='seo_properties'])
94
95def install(self):
96    """Install product"""
97    out = StringIO()
98    Layers =[]
99    mtool = getToolByName(self, 'portal_migration')
100    plone_version = mtool.getFileSystemVersion()
101    product_path = package_home(qSEO_globals)
102    versioned_skin = path_join(product_path, 'skins','qSEOptimizer', plone_version)
103    #add exposeDCMetaTags property to Plone 2.0.x
104    props = getToolByName(self, 'portal_properties').site_properties
105    if not hasattr(props, 'exposeDCMetaTags'):
106            props._setProperty('exposeDCMetaTags', True, 'boolean')
107
108    Layers.append('qSEOptimizer')
109    out.write('  Searching for %s... ' % versioned_skin)
110    if path_exists(versioned_skin):
111        out.write('found.\n')
112        Layers.append('qSEOptimizer/%s' % plone_version)
113    else:
114        out.write("""not found.\nLimited functionality mode. Upgrade qSEOptimizer product or report to support@quintagroup.com if uprade not available.\n\n""") 
115    out.write('Call setupSkin... \n')
116    setupSkin(self, out, Layers)
117
118    out.write('Call setupActions... \n')
119    setupActions(self, out)
120
121    configTool = getToolByName(self, 'portal_controlpanel', None)
122    if configTool:
123        for conf in configlets:
124            configTool.registerConfiglet(**conf)
125            out.write('Added configlet %s\n' % conf['id'])
126
127    return out.getvalue()
128
129def uninstall(self):
130    """ Uninstall Products """
131    out = StringIO()
132
133    removeSkin(self, 'qSEOptimizer')
134    removeActions(self)
135
136    configTool = getToolByName(self, 'portal_controlpanel', None)
137    if configTool:
138        for conf in configlets:
139            try:
140                configTool.unregisterConfiglet(conf['id'])
141            except BadRequestException,KeyError:
142                portal_icons = getToolByName(self,'portal_actionicons')
143                portal_icons.manage_removeActionIcon(conf['category'],conf['id'])
144            out.write('Removed configlet %s\n' % conf['id'])
145
146    return 'qSEOptimizer succesfully removed'
Note: See TracBrowser for help on using the repository browser.