source: products/qSEOptimizer/tags/0.5.2/Extensions/Install.py @ 1591

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

Building directory structure

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