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