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